2012-09-12 20 views
2

我对线程很陌生。我启动一个线程是这样的:线程和浏览器控件

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

,在某些时候,我想在main_building_stuff从加载到主线程的web浏览器控制研究的网页虎视眈眈的一些数据。

我做了有这段代码:

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

但是,在一个错误的结果... InvalidCastException的(指定的强制转换无效)

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

+1

貌似你试图刮掉数据?你可能想看看这里:http://htmlagilitypack.codeplex.com/ - 网页浏览器不是一个非常有效的方式去做。 – KingCronus

+0

@KingCronus,听起来不错,但我想让用户能够与网站互动(如控制,看到网站,可以点击东西(登录东西)和在某一点上,我想要报废数据。可以用htmlagilitypack来完成吗? – Mathlight

+0

“但是这样会导致错误......” - 究竟是什么错误? – Spontifixus

回答

4

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

这是工作的一段代码:

webBrowser1.Invoke(new Action(() => { 
        HtmlElement lit = webBrowser1.Document.GetElementById("buildqueue"); 
        result = "whatever"; 
       })); 
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,我不知道你是否从另一个名称空间导入了一个。

+0

问题是,我从另一个线程运行它。所以我无法访问网页浏览器...... – Mathlight

+0

这不会导致'InvalidCastException',但我很高兴你的问题已经修复。 – tomfanning

+0

好吧,如果你这么说,但不知何故,我只是补充说,它的工作原理......但谢谢你与其他人一起思考tryibg来解决问题 – Mathlight