天天看點

webBrowser1_DocumentCompleted不停被調用

我在webbrowser1_documentcompleted不停被調用裡寫了些代碼,用于填寫一個表單,并向伺服器送出。

但是webbrowser1_documentcompleted不停被調用,頁面不停被重新整理,不知道什麼原因。我用了這篇文章中第三個方法,就是在執行完我的代碼之後,把webbrowser1_documentcompleted解除安裝掉,呵呵,很糙的方法。

文章轉帖如下:

關于documentcompleted事件,msdn給出的解釋是在文檔加載完畢後執行,但是在我的程式中documentcompleted卻被多次調用,查了一下資料,大概出現了以下幾種情況。

1、webbrowser載入一個頁面後documentcompleted事件會執行兩次,但這兩次的readystate狀态不一樣,分别是intercative和complete。而msdn對這兩種狀态值的解釋是:complete該控件已完成新文檔及其所有内容的加

載;interactive該控件已經加載足夠的文檔以允許有限的使用者互動,比如單擊已顯示的超連結。由此可見,實際上

documentcompleted事件會在interactive狀态和complete狀态各調用一次,那麼我們可以根據我們的需要來判斷到底需要那

一次。解決辦法執行個體代碼如下:

if(webbrowser1.readystate!=webbrowerreadystate.complete)

    return; 

2、如果一個頁面中含有多個架構頁,那麼在每個架構頁加載完成時也可能觸發一次documentcompleted事件(msdn對其解釋是在多個的幀的情況下documentcomplete擷取觸發多次。并非每個架構将觸發此事件,但觸發downloadbegin事

件的每個架構将觸發相應的documentcomplete事件)。這種情況下解決辦法執行個體代碼如下:

if(e.url.tostring()!=webbrowser1.url.tostring())

    return;

此外,msdn給出了另外一種方案,詳見:

3、對于以上兩種情況我是沒遇到,卻碰到了第三種情況:在我的documentcompleted事件裡執行了相應的代碼,結果又觸發了一次documentcompleted事件,如此循環往複,沒完沒了。使用webbrowser1.stop(),還是沒法停止。

webbrowser1.nagviate("about:blank")問題還是依舊。這時候我們隻能解除安裝documentcompleted事件了,

即在documentcompleted事件裡執行完你需要的代碼後,再來一句:

webbrowser1.documentcompleted -= new webbrowserdocumentcompletedeventhandler(webbrowser1_documentcompleted);