我在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);