webBrowser载入网页机制网页加载是否完毕判断

    根据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属性

测试通过,屡试不爽!

原文地址:https://www.cnblogs.com/sung/p/2855187.html