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

如题所述

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等,程序复杂,效果也不太理想。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-21

一、通过DocumentCompleted 事件

二、通过webBrowser.ReadyState

三、通过webBrowser.IsBusy。

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

第2个回答  2017-12-26

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();

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网