C# BackgroundWorker和webBrowser-指定的强制转换无效

C# BackgroundWorker和webBrowser-指定的强制转换无效,c#,winforms,C#,Winforms,我有以下代码: void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { while(true) { try { var table = webBrowser3.Document.GetElementById("emailTable"); var tr = table.GetElementsByTagName("tr");

我有以下代码:

void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    while(true)
    {
        try
        {
            var table = webBrowser3.Document.GetElementById("emailTable");
            var tr = table.GetElementsByTagName("tr");
            if (tr.Count > 1)
            {
                var link = tr[1].GetElementsByTagName("td")[1].GetElementsByTagName("a")[0].GetAttribute("href");
                webBrowser3.Navigate(link);
            }
        }
        catch (Exception)
        {
            //webBrowser3.Document.GetElementById("emailTable"); => Specified cast is not valid        
        }  
        Thread.Sleep(1000);
    }
}
在我的代码中,我在winform应用程序的
webBrowser3
中加载一个网页,然后启动
backgroundWorker1
,以捕获对站点所做的任何更改(站点通过ajax向表中添加元素)。不幸的是,它抛出了一个异常


我如何定期检查
webBrowser3.Document
中的更改,并允许winform应用程序连续工作?

由于您无法从后台工作人员访问GUI控件,因此您会遇到该异常;根据定义,后台工作人员处于不同的线程上


如果你想做这样的事情,你需要从后台工作人员那里打个电话到该网站,也许可以使用它并将其与你已有的进行比较。

你不能从
非UI
线程
后台工作人员
更改
UI控件
您可以使用
invokererequired

试试这个:

    if(this.webBrowser3.InvokeRequired)
    {
    Invoke((MethodInvoker)(() => {
                var table = webBrowser3.Document.GetElementById("emailTable");
                var tr = table.GetElementsByTagName("tr");
                if (tr.Count > 1)
                {
                    var link = tr[1].GetElementsByTagName("td")[1].GetElementsByTagName("a")[0].GetAttribute("href");
                    webBrowser3.Navigate(link);
                }                    
         });
     }

异常和完整异常消息的确切堆栈跟踪是什么?什么是
webBrowser3
?您如何尝试确定页面是否有更改?您是否将元素/值存储在数据库中,以便与之进行比较?可能的重复项
    if(this.webBrowser3.InvokeRequired)
    {
    Invoke((MethodInvoker)(() => {
                var table = webBrowser3.Document.GetElementById("emailTable");
                var tr = table.GetElementsByTagName("tr");
                if (tr.Count > 1)
                {
                    var link = tr[1].GetElementsByTagName("td")[1].GetElementsByTagName("a")[0].GetAttribute("href");
                    webBrowser3.Navigate(link);
                }                    
         });
     }