2016-11-05 52 views
1

我有多個鏈接,我想在一個循環中訪問。C#使用Webbrowser訪問多個鏈接

訪問了一個站點後,我希望線程等到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()

由於某些原因,異步方法或autoresetevent似乎不起作用。

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

回答

0

瀏覽器通常使用一個GUI線程。你用WaitOne阻塞線程。您應該使用在一個線程中工作的不同的同步機制。

+0

你有什麼機制? – user3927030

+0

嗯,你不應該阻止GUI線程。對於你的問題,你可以在文檔完成時在GUI線程上安排一個新的任務。這可以通過使用計時器並將OpenNewProduct設置爲計時器功能來完成。 – smibe