雖然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("讀取完成");
        }

這樣再也不會發生重複執行的狀況

 

 

 

arrow
arrow
    全站熱搜

    門外漢 發表在 痞客邦 留言(0) 人氣()