到目前爲止,我有一個單線程的應用程序爬行網站。
因爲我想讓它更快,所以我嘗試重建到多線程應用程序。 這就是我所做的:
我有一個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