Как многопоточность на webBrowser DocumentCompleted?

Вопрос:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//list of tasks
}

private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//list of tasks
}

см. выше. мой вопрос заключается в том, как заставить оба из них работать одновременно (сделать два потока для управления ими вручную), теперь проблема в том, что все они выполняются отдельно в основном потоке, и я не мог выполнять другие задачи, спасибо за помощь! извините за плохой английский

и я попытался использовать, например:

    Thread threadw1 = new Thread(() => webBrowser1.Navigate("url1"));
Thread threadw2 = new Thread(() => webBrowser2.Navigate("url2"));
threadw1.Start();
threadw2.Start();

но это то, чтобы использовать потоки для навигации, как только навигация будет выполнена, тогда система запускает документ, завершенный отдельно. и я не знаю, как их контролировать, спасибо за помощь!

Я завернул задачи в функцию, и теперь проблема в том, когда я это делаю, она не работает

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.ReadyState < WebBrowserReadyState.Complete) return;

// Do the work, you have the event args in ev


Thread wbb1 = new Thread(() => wb1task());
wbb1.Start();
//wb1task();
}

но когда я делаю это, он работает, но он снова становится одним потоком:

 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.ReadyState < WebBrowserReadyState.Complete) return;

// Do the work, you have the event args in ev


//Thread wbb1 = new Thread(() => wb1task());
// wbb1.Start();
wb1task();
}

поток начался, тогда документ был завершен, мне нужно что-то удерживать после wbb1.Start(); чтобы он не вышел из цикла 🙂

ОК, это решает проблему, спасибо всем!

wbb1.SetApartmentState(ApartmentState.STA);

Ответ №1

Поместите свои задачи в обработчики для события DocumentCompleted. Я использовал поток, потому что вы это упомянули. Я предлагаю использовать ThreadPool или Task.

private void webBrowser1_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
new Thread((state) => {
WebBrowserDocumentCompletedEventArgs ev =
(WebBrowserDocumentCompletedEventArgs) state;
// Do the work, you have the event args in ev

}) {Name = "Thread for webBrowser1"}.Start(e);
}

Оцените статью
TechArks.Ru
Добавить комментарий