到目前为止,我有一个单线程的应用程序爬行网站。
因为我想让它更快,所以我尝试重建到多线程应用程序。 这就是我所做的:
我有一个Crawl Class,它拥有一个WebBrowser对象。 这是我如何启动线程:Web浏览器MultiThreded Casting异常
Crawler c1 = new Crawler();
Thread t1 = new Thread(new ThreadStart(c1.Crawl));
t1.SetApartmentState(ApartmentState.STA);
t1.start()
的线程到达此功能:
LogIn(bool isInit)
{
browser = new WebBrowser();
NavigateAndWaitForLoad(browser, "http://www.someurl.com", 1000);
HtmlElement elemEmail = (HtmlElement)browser.Document.GetElementById("email");
}
void NavigateAndWaitForLoad(WebBrowser wb, string link, int waitTime)
{
wb.Navigate(link);
int count = 0;
while (wb.ReadyState != WebBrowserReadyState.Complete)
{
Thread.Sleep(sleepTimeMiliseconds);
Application.DoEvents();
count++;
if (count > waitTime/sleepTimeMiliseconds)
break;
}
现在在单线程它的伟大工程, 然而在mutlithreded应用程序崩溃在这一行: HtmlElement elemEmail =(HtmlElement)browser.Document.GetElementById(“email”);
除非法铸造??? !!!
不知道为什么?
请帮助...
非法铸造?以及'browser.Document.GetElementById(“email”)''的实际类型是什么?你可以在调试器中查找吗? – Vlad
它的类型是HtmlElement – user1763180
不错,那么投不应该失败吧? – Vlad