在工作中遇到了這樣的問題,那就是要判斷WebBrowser瀏覽器網頁是否加載完成,通過搜索發現網友們解決這一問題的幾種方法,但都不能解決實際問題,現在我們就來看看網友們是如何解決這一問題的。
一、通過DocumentCompleted 事件
每一次網頁完成之后都后發送DocumentCompleted 事件,但是擁有多個frame時,瀏覽器就會發送多個DocumentCompleted事件,所以到最后也無法最終判斷網頁最終什么時候加載完成。
二、通過webBrowser.ReadyState
通過每一次讀取webBrowser.ReadyState,如同上前面所列的一樣,每一次DocumentCompleted完成之事都會置ReadyState為Complete ,所以還是無法准確判斷網頁是否完成准確的判斷。
三、通過webBrowser.IsBusy,有的人甚至在此基礎上判斷什么URL或者加Timer等等,程序復雜,效果也不太理想。我想能不能通過多個簡單的方法,准確的判斷網頁否加載完成呢?
下面看看我的代碼:
private void Delay(int Millisecond) //延遲系統時間,但系統又能同時能執行其它任務; { DateTime current = DateTime.Now; while (current.AddMilliseconds(Millisecond) > DateTime.Now) { Application.DoEvents();//轉讓控制權 } return; } 主要的函數: private bool WaitWebPageLoad() { int i=0; string sUrl; while (true) { Delay(50); //系統延遲50毫秒,夠少了吧! if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) //先判斷是否發生完成事件。 { if (!webBrowser1.IsBusy) //再判斷是瀏覽器是否繁忙 { i = i + 1; if (i == 2) { sUrl = webBrowser1.Url.ToString(); if (sUrl.Contains("res")) //這是判斷沒有網絡的情況下 { return false; } else { return true; } } continue; } i=0; } } }
