雖然webBrowser讀取完成會觸發事件DocumentCompleted, 但實際上卻不斷重複執行,
因此透過4個範例說明如何解決重複執行的狀況.
[範例1]
只使用DocumentCompleted事件,結果會觸發事件多次.
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Console.WriteLine("讀取完成");
結果一共執行了5次
[範例2]
透過判斷是否讀取到網頁內容中的最後一個物件ID
結果仍然重複讀取完成
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Console.WriteLine("讀取中...");
if (webBrowser1.Document.GetElementById("網頁的最後一個ID") ==null ) return;
Console.WriteLine("讀取完成");
}
[範例3]
透過webBrowser的ReadyState 狀態判斷是否讀取完成
結果還是會發生重複讀取完成
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Console.WriteLine("讀取中...");
if (webBrowser1.ReadyState < WebBrowserReadyState.Complete) return;
Console.WriteLine("讀取完成");
}
[範例4]
使用ReadyState及1個變數判斷是否已執行完成, 即可避免重複執行.
private void btnTest_Click(object sender, EventArgs e)
{
finished = false;
webBrowser1.Navigate("http://www.xxx.com");
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Console.WriteLine("讀取中...");
if (webBrowser1.ReadyState < WebBrowserReadyState.Complete || finished == true) return;
finished = true;
Console.WriteLine("讀取完成");
}
這樣再也不會發生重複執行的狀況
文章標籤
全站熱搜
