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

时间:2012-03-05 12:05:32

标签: c# winforms browser

我正在使用此代码来检查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();
}

4 个答案:

答案 0 :(得分:5)

实际上,异常可能是从非主要UI线程的线程访问WebBrowser.Document属性引起的。您可以通过在System.InvalidCastException

的堆栈跟踪中查找以下行来验证这一点
  

at 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);
}

答案 1 :(得分:2)

我会尝试......

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

这将删除强制转换异常

和DoWork

string docText = e.Argument.ToString();

这将删除UI线程问题

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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