2016-11-05 4 views
1

私はループ内で複数のリンクを参照しています。C#ウェブブラウザで複数のリンクを参照

サイトにアクセスした後、次のリンクにアクセスする前にスレッドが完了し、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()でフリーズしています。

何らかの理由で、非同期メソッドまたは自動検出が機能していないようです。

documentCompletedが完了するまで待つ方法を見つける必要があります。

答えて

0

ブラウザは通常、1つのGUIスレッドを使用しています。あなたはWaitOneでスレッドをブロックしています。 1つのスレッドで動作する別の同期メカニズムを使用する必要があります。

+0

あなたはどのメカニズムに留意していますか? – user3927030

+0

ええと、GUIスレッドを決してブロックするべきではありません。あなたの問題については、ドキュメントが完成したときにGUIスレッドで新しいタスクをスケジュールすることができます。これは、タイマーを使用し、OpenNewProductをタイマー機能として設定することで実行できます。 – smibe