根據Browser_DocumentCompleted,Browser_Navigated,Browser_Navigating這三個消息來判斷的,用什么計數器啦,還有判斷IsBusy,StatusText等。。以上或多或少對於一些網頁是可行的,對於另一些網頁卻又有另外的意外,所以總的來說,都不能通用准確判斷,查找許多資料發現wenbbrowser來自於EXwenbbrowser,然而微軟在封裝之后把其精簡了很多東西,本人費勁苦心找到國外牛人封裝的擴展wenbbrowser(http://www.codeproject.com/Articles/13598/Extended-NET-2-0-WebBrowser-Control),加以修改后可完美解決,此在此擴展版,可以找本人索取。
WebBrowser的工作機制大概是這樣的,在url上打上www.163.com,這時候,WebBrowser會開始裝載www.163.com這個網頁,觸發一個Browser_Navigating,ReadyState置為非Complete,IsBusy置為true,StatusText置為"請求的url內容",這個文檔完畢后,觸發一個Browser_DocumentCompleted,同時,ReadyState置為Complete,IsBusy置為false,StatusText置為"完成",如果通常都會有frame,如www.163.com/kk.jsp#fsd什么的,WebBrower就會觸發Browser_Navigating,ReadyState置為非Complete,IsBusy置為true,StatusText置為"請求的url內容",再去裝載那個frame,完畢后,觸發一個Browser_DocumentCompleted,同時,ReadyState置為Complete,IsBusy置為false,StatusText置為"完成",剩下的frame,余次類推。
因此,可以重新封裝 webbrowser控件完美解決多次調用加載完畢方法而正確判斷是否最好加載完畢
繼承控件,添加屬性
private bool _AllComplete;
//是否完成
public bool AllComplete
{
get
{
return _AllComplete;
}
private set
{
_AllComplete = value;
}
}
重寫Navigate
/// <summary>
/// 同Navigate方法,為了能判斷是否加載完成加入AllComplete初始化
/// </summary>
/// <param name="urlString"></param>
public void Open(string urlString)
{
this.AllComplete = false;
this.Navigate(urlString);
}
加載完畢事件添加完畢修改屬性即可
使用中只需判斷AllComplete屬性
測試通過,屢試不爽!
