【问题标题】:"Specified cast is not valid" error“指定的演员表无效”错误
【发布时间】:2012-03-22 21:45:27
【问题描述】:

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

【问题讨论】:

  • 你能发布异常的堆栈跟踪吗?
  • 根据the MSDNDocument 属性是object,因此您需要在取消引用之前对其进行转换以获得Body.InnerText。你错过了一些代码吗?
  • @ChrisF 这不应该让编译器抱怨,而不是在运行代码时引发异常吗?
  • @FredrikMörk - 是的,这就是为什么我问 OP 是否遗漏了他的问题中的一些代码。

标签: c# winforms browser


【解决方案1】:

.Body 部分将返回一个对象空引用异常,如果您没有等待页面加载,.innerHTML 将不会被识别为字符串,它可能会触发您收到的错误结果。在这一切之前,您是否正确等待文件加载?如果您需要帮助,请查看我关于如何正确等待网络浏览器控制的答案。

【讨论】:

    【解决方案2】:

    该异常实际上可能是由从不是主 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);
    }
    

    【讨论】:

    【解决方案3】:

    我会尝试...

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

    这将删除强制转换异常

    在 DoWork 中

    string docText = e.Argument.ToString();
    

    这将消除 UI 线程问题

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-06
        • 1970-01-01
        • 1970-01-01
        • 2014-11-17
        相关资源
        最近更新 更多