雖然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("讀取完成"); }
這樣再也不會發生重複執行的狀況
全站熱搜
留言列表