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

本文关键字:转换 无效 错误 quot | 更新日期: 2023-09-27 18:26:48

我使用这段代码是为了检查webBrowser1中的文本,尽管我收到了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();
}

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

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

位于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);
}

我会尝试。。。

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

这将删除强制转换异常

和DoWork

string docText = e.Argument.ToString();

这将删除UI线程问题

也许您应该等待WebBrowser ctrl中的DocumentCompleted事件,然后再访问Document。

.Body部分将返回一个对象null引用异常,并且.innerHTML将不会被识别为字符串。如果您没有等待页面加载,它可能会触发您因此而得到的错误。在所有这些之前,您是否正确地等待文档加载?如果你需要帮助,请查看我关于如何在网络浏览器控件上进行正确等待的答案。