2011-11-24 44 views
0

我需要暫停循環,直到webbrowser完成頁面加載。webBrowser加載頁面時暫停循環的最佳方式是什麼?

string[] lines = (string[]) Invoke((ReadLine)delegate 
       { 
        return logins.Lines; 
       }); 


foreach (string line in lines) { 
    //..   
    if (TryParseUserDetails(line, false, out data) { 
     //...          
      wb.Navigate(url.Next()); 
    } 
} 

如何等待wb頁面加載到之前繼續循環?

我試過使用輪詢標誌,在WebBrowserDocumentCompletedEventHandler回調函數中設置一個變量爲true。 然後:

wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
          delegate(object sender2, 
           WebBrowserDocumentCompletedEventArgs args) 
          { 

          done = true; 
         }); 

// ..

wb.Navigate(url.Next(); 
    while (!done) 
    { 

    } 
    done = false; 

我在尋找類似:

wb.WaitForDone(); 

任何幫助表示讚賞。提前致謝。

回答

1

您可以嘗試使用AutoResetEvent而不是布爾值。像:

外循環:

AutoResetEvent evt = new AutoResetEvent(false); 

然後事件處理程序:

wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
         delegate(object sender2, 
          WebBrowserDocumentCompletedEventArgs args) 
         { 
          evt.Set(); 
         }); 

,然後在循環:

evt.WaitOne(); 
+1

你可能想用類似這樣的東西替換EventHandler:'wb.DocumentCompleted + =(o,args)=> evt.Set();' - 只是爲了使它可讀。 – ebb

1

爲什麼不簡單地做你想在DocumentCompleted回調像這裏所說的:SO Question

+0

我有很多的鏈接在接取webBrowser,我需要通過鏈接進行鏈接。 –

+0

當你真的需要這個都鐸王朝的答案最符合你的需求。 – dasheddot

相關問題