到目前为止,我有一个抓取网站的单线程应用程序。
因为我想让它更快,我尝试重建为一个多线程应用程序。这就是我所做的:
我有一个 Crawl 类,它包含一个 WebBrowser 对象。这就是我启动线程的方式:
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;
}
现在在单线程中它工作得很好,但是在多线程应用程序中它在这一行崩溃: HtmlElement elemEmail = (HtmlElement)browser.Document.GetElementById("email");
非法铸造除外???!!!
不知道为什么?
请帮忙...