MultiThreading WebBrowser Control C # STA [duplizieren]
Diese Frage hat hier bereits eine Antwort:
WebBrowser-Steuerelement in einem neuen Thread 4 AntwortenIch möchte 3 Threads erstellen, die jeweils das WebBroswer-Steuerelement ausführen. Daher möchte ich den ThreadPool verwenden, um die Dinge zu vereinfachen.
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);
}
Aber ich bekomme eine Fehlermeldung, dass ich einen STA-Thread benötige, der niemals der ThreadPool sein wird. Bevor ich diese Methode ausprobierte, habe ich es versucht.
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();
}
Und die WebBrowser sind alle initialisiert und alles sieht gut aus, aber nur einer von zwei macht tatsächlich etwas und es ist überhaupt nie konsistent. Threading war so ein Albtraum. Kann jemand eine nette Alternative vorschlagen?