如何判断Webbrowser是否加载成功?

海甜恬qx
2018-01-25 · TA获得超过2.1万个赞
知道小有建树答主
回答量:180
采纳率:100%
帮助的人:2.6万
展开全部
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)   //为什么 是2呢?因为每次加载frame完成时就会置IsBusy为false,未完成就就置IsBusy为false,你想一想,加载一次,然后再一次,再一次...... 最后一次.......  
                       {                              
                            sUrl = webBrowser1.Url.ToString();                              
                            if (sUrl.Contains("res")) //这是判断没有网络的情况下                             
                              {                                  
                                 return false;                              
                             }                              
                           else                              
                            {                                  
                               return true;                              
                            }                          
                     }                         
              continue;                      
              }                      
             i=0;                  
         }                   
    }

解决这一问题的其他方法及问题

一、通过DocumentCompleted 事件

每一次网页完成之后都后发送DocumentCompleted 事件,但是拥有多个frame时,浏览器就会发送多个DocumentCompleted事件,所以到最后也无法最终判断网页最终什么时候加载完成。

二、通过webBrowser.ReadyState

通过每一次读取webBrowser.ReadyState,如同上前面所列的一样,每一次DocumentCompleted完成之事都会置ReadyState为Complete ,所以还是无法准确判断网页是否完成准确的判断。

三、通过webBrowser.IsBusy

有的人甚至在此基础上判断什么URL或者加Timer等,程序复杂,效果也不太理想。

____神知无知
2018-01-21 · TA获得超过162个赞
知道答主
回答量:6
采纳率:0%
帮助的人:3万
展开全部

一、通过DocumentCompleted 事件

二、通过webBrowser.ReadyState

三、通过webBrowser.IsBusy。

同时给你提供以下图片中的代码,可以完全解决。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f1c59834b9
2017-12-26 · TA获得超过4659个赞
知道小有建树答主
回答量:39
采纳率:0%
帮助的人:4480
展开全部

WebBrowser加载完页面后,会执行 DocumentCompleted()事件

创建一个变量记录状态,

在设置 Me.WebBrowser1.Navigate() 时设置变量为初始

在 WebBrowser1_DocumentCompleted()中触发更改变量为完成状态.

通过每一次读取webBrowser.ReadyState,每一次DocumentCompleted完成之事都会置ReadyState为Complete ,所以还是无法准确判断网页是否完成准确的判断。 下面看看我的代码: 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) //为什么 是2呢?因为每次加载frame完成时就会置IsBusy为false,未完成就就置IsBusy为false,你想一想,加载一次,然后再一次,再一次...... 最后一次.......{sUrl = webBrowser1.Url.ToString();

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式