これまで、Web サイトをクロールするシングル スレッド アプリを使用していました。
高速化したいので、マルチスレッドアプリにリビルドしてみました。これが
私がすることです: 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;
}
シングル スレッドでは問題なく動作しますが、マルチスレッド アプリでは次の行でクラッシュします。
違法なキャスティングを除いて???!!!!
理由がわからない?
助けてください...