C#使用Webbrowser访问多个链接

C#使用Webbrowser访问多个链接,c#,asynchronous,autoresetevent,C#,Asynchronous,Autoresetevent,我想在一个循环中访问多个链接 访问站点后,我希望线程在访问下一个链接之前等待documentCompleted完成 foreach (HtmlElement link in linkArray) { OpenNewProduct(link.ToString()); } public void OpenNewProduct(string url) { WebBrowser webBrowser = new WebBrowser(); webBrowser.Documen

我想在一个循环中访问多个链接

访问站点后,我希望线程在访问下一个链接之前等待
documentCompleted
完成

foreach (HtmlElement link in linkArray)
{
    OpenNewProduct(link.ToString());
}

public void OpenNewProduct(string url)
{
    WebBrowser webBrowser = new WebBrowser(); 
    webBrowser.DocumentCompleted += product_DocumentCompleted;
    webBrowser.Navigated += new WebBrowserNavigatedEventHandler(webBrowser1_Navigated);
    webBrowser.Navigate(url);

    _waitForPageProccesingHandle.WaitOne();
}

private void product_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    notHeb();
    notRedirected(sender, e);

    ((Control)webBrowser1).Enabled = false;
    getProduct();
    _waitForPageProccesingHandle.Set();
}
浏览器冻结在
WaitOne()

出于某种原因,异步方法或自动resetEvent似乎不起作用


我需要找到一种方法,等待
documentCompleted
完成。

浏览器通常使用一个GUI线程。你很擅长用WaitOne阻塞线程。您应该使用在一个线程中工作的不同同步机制。

浏览器通常使用一个GUI线程。你很擅长用WaitOne阻塞线程。您应该使用在一个线程中工作的不同同步机制。

Hmm,您不应该阻止GUI线程。对于您的问题,您可以在文档完成时在GUI线程上安排一个新任务。这可以通过使用计时器并将OpenNewProduct设置为计时器函数来完成。嗯,您不应该阻止GUI线程。对于您的问题,您可以在文档完成时在GUI线程上安排一个新任务。这可以通过使用计时器并将OpenNewProduct设置为计时器函数来实现。