线程和webbrowser控件

时间:2012-09-12 10:23:44

标签: c# multithreading thread-safety webbrowser-control

我对线程很新。我开始这样一个线程:

Thread t_main;
t_main = new Thread(main_building_stuff);
t_main.Start();

在某些时候,我想在main_building_stuff中从一个加载到主线程中的webbrowser控件的网页中抓取一些数据。

我用这段代码做到了这一点:

HtmlElement lit = webBrowser1.Document.GetElementById("buildqueue");

但这会导致错误...... InvalidCastException(指定的强制转换无效)

从网络浏览器接收数据的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

有人回答了这个问题,给出了正确答案。但由于某种原因,他删除了它,所以谢谢你,但我不记得你的名字......

这是有效的代码:

webBrowser1.Invoke(new Action(() => {
                    HtmlElement lit = webBrowser1.Document.GetElementById("buildqueue");
                    result = "whatever";
                }));

答案 1 :(得分:1)

嗯。

System.Windows.Forms.HtmlDocument.GetElementById()肯定会返回System.Windows.Forms.HtmlElement

如果您更改

会发生什么
HtmlElement lit = webBrowser1.Document.GetElementById("buildqueue");

System.Windows.Forms.HtmlElement lit = webBrowser1.Document.GetElementById("buildqueue");

您是否仍然收到无效的投射错误?

我碰巧知道有多个常用的类叫HtmlElement,我想知道你是否从另一个名称空间中导入了一个。