それぞれがWebBroswerコントロールを実行する3つのスレッドを作成します。ですから、私はThreadPoolを使いやすくしたいと思います。MultiThreading WebBrowserコントロールC#STA
for(int i = 0;i < 3;i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(gotoWork), i));
}
WaitAll(waitHandles);
....../
void gotoWork(object o)
{
string url = String.Empty;
int num = (int)o;
switch(num)
{
case 0:
url = "google.com";
break;
case 1:
url = "yahoo.com";
break;
case 2:
url = "bing.com";
break;
}
WebBrowser w = new WebBrower();
w.Navigate(url);
}
しかし、私はThreadPoolのはなることはありませんSTAスレッドを必要とするというエラーを取得します。この方法を試す前に私はこれを試しました。
Thread[] threads = Thread[3];
for(int i = 0;i < 3;i++)
{
threads[i] = new Thread(new ParameterizedStart(gotoWork);
threads[i] = SetApartmentState(ApartmentState.STA); //whoo hoo
threads[i] = Start();
}
for(int i = 0; i < 3;i++)
{
threads[i].Join();
}
そしてWebBrowsersすべて初期化され、すべてがよさそうだが、一つだけより2は、実際に何かをし、そのすべてで一貫することはありません。スレッディングはそのような悪夢です。誰も良い代替案を提案することはできますか?
一度に複数のページをロードするのはなぜ? WebBrowserが必要なのか、HttpWebRequestの仕事が必要ですか(たとえば、ページを表示する必要がありますか、ページ上でJavaScriptを実行する必要がありますか)。 Webクローリング/スクレイピングを行う場合は、より効率的な方法があります。 – Chad