“指定的强制转换无效”错误

我正在使用此代码来检查webBrowser1中的文本,尽管我收到错误“指定的强制转换无效”。 for string docText = webBrowser1.Document.Body.InnerText; 。 有什么想法吗? 可能是因为我正在从另一个线程访问webBrowser吗? 谢谢。

 public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { string docText = webBrowser1.Document.Body.InnerText; if (docText == "Hello") { MessageBox.Show("Alerted!"); } } private void timer1_Tick(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); } 

我会尝试……

 backgroundWorker1.RunWorkerAsync(webBrowser1.Document.Body.InnerText); 

这将删除强制转换exception

在DoWork中

 string docText = e.Argument.ToString(); 

这将删除UI线程问题

事实上,exception可能是从不是主UI线程的线程访问WebBrowser.Document属性引起的。 您可以通过在System.InvalidCastException的堆栈跟踪中查找以下行来validation:

在System.Windows.Forms.UnsafeNativeMethods.IHTMLDocument2.GetLocation()
在System.Windows.Forms.WebBrowser.get_Document()

如果是这种情况,请尝试将网页内容作为参数传递给后台线程:

 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { var docText = (string)e.Argument; } private void timer1_Tick(object sender, EventArgs e) { var docText = webBrowser1.Document.Body.InnerText; backgroundWorker1.RunWorkerAsync(docText); } 

也许你应该在访问Document之前等待来自WebBrowser ctrl的DocumentCompleted事件。

.Body部分将返回一个对象null引用exception,如果你没有等待加载页面,.innerHTML将不会被识别为字符串,它可能会触发你得到的错误。 你有没有正确等待文件加载之前这一切? 如果您需要帮助,请查看我的答案,了解如何正确等待webbrowser控件。