WebBrowser控件判断完全加载中DocumentCompleted和Navigated的关系
2013-01-07 12:42
567 查看
WebBrowser控件判断完全加载使用DocumentCompleted是有问题的,所以有人提出可以使用判断DocumentCompleted的次数和Navigated次数完全相等的方法判断是否完全加载
并提出每次都会Navigated在DocumentCompleted之前执行,
此方案在本人测试后发现此两事件没有必然关系,并且也没先后次序
测试原理:
定义2个全局变量用于记录两事件次数,并使用一个计时器,即时判断当前两全局变量
如果最后两个值不相等,那么两事件不是同时必然发生,
如果出现同一时刻DocumentCompleted的次数大于Navigated,那么前者就不一定是在Navigated之后执行了,不能确定两者的顺序关系
测试代码:
测试淘宝,如之前的错误结论,可以通过测试,
找个复杂点的网站www.163.com
测试
结果是Navigated次数才33次,还少1次,所以据此说明,之前的他人说法是不对的
据此方法来判断是否加载完也是不对的,
通过多方查找
有一种方法可以完全判断是否加载完成:
正在测试中
并提出每次都会Navigated在DocumentCompleted之前执行,
此方案在本人测试后发现此两事件没有必然关系,并且也没先后次序
测试原理:
定义2个全局变量用于记录两事件次数,并使用一个计时器,即时判断当前两全局变量
如果最后两个值不相等,那么两事件不是同时必然发生,
如果出现同一时刻DocumentCompleted的次数大于Navigated,那么前者就不一定是在Navigated之后执行了,不能确定两者的顺序关系
测试代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading;
usingSystem.Windows.Forms;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.IO;
usingSystem.Text.RegularExpressions;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingmshtml;
usingSHDocVw;
namespaceTestCrass
{
publicpartialclassForm5:Form
{
System.Timers.Timertime=newSystem.Timers.Timer();
intqunue=0;//当前轮次
intced=0;//DocumentCompleted次数
intned=0;//Navigated次数
intning=0;//Navigating次数
publicForm5()
{
InitializeComponent();
time.Interval=10;
time.Enabled=true;
time.Elapsed+=newSystem.Timers.ElapsedEventHandler((ss,ee)=>{button1_Click(ss,ee);});
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
Invoke((ThreadStart)delegate()
{
//此刻ced比ned大,说明DocumentCompleted事件触发次数大于Navigated,所以Navigated可能后发生
if(ned<ced)
{
label5.Text="第"+qunue.ToString()+"次有问题"+ned.ToString()+".."+ced.ToString();
}
});
}
privatevoidForm5_Load(objectsender,EventArgse)
{
webBrowser1.Navigate("http://item.taobao.com/item.htm?id=21926784253");
}
privatevoidwebBrowser1_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse)
{
ced++;
label4.Text="ced"+ced.ToString();
if(webBrowser1.DocumentText.Contains("无法显示该网页")||webBrowser1.DocumentText.Contains("已取消")||webBrowser1.DocumentText.Contains("可以尝试以下操作"))
{
webBrowser1.Refresh();
return;
}
//time.Enabled=true;
//button1_Click(null,null);
}
privatevoidwebBrowser1_Navigated(objectsender,WebBrowserNavigatedEventArgse)
{
ned++;
label3.Text="ned"+ned.ToString();
}
privatevoidwebBrowser1_Navigating(objectsender,WebBrowserNavigatingEventArgse)
{
ning++;
qunue++;
label1.Text="qunue"+qunue.ToString();
label2.Text="ning"+ning.ToString();
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
webBrowser1.Navigate(textBox1.Text);
}
privatevoidbutton3_Click(objectsender,EventArgse)
{
ced=0;
ned=0;
ning=0;
qunue=0;
label1.Text="";
label2.Text="";
label3.Text="";
label4.Text="";
}
}
}
测试淘宝,如之前的错误结论,可以通过测试,
找个复杂点的网站
测试
结果是Navigated次数才33次,还少1次,所以据此说明,之前的他人说法是不对的
据此方法来判断是否加载完也是不对的,
通过多方查找
有一种方法可以完全判断是否加载完成:
正在测试中
相关文章推荐
- 判断webbrowser页面是否完全加载完毕的方法
- Delphi中用Webbrowser加载百度地图滚轮失效(ApplicationEvents里使用IsChild提前判断是哪个控件的消息)
- Webbrowser控件判断网页加载完毕的简单方法
- Webbrowser控件判断网页加载完毕的简单方法 (转)
- 关于webBrowser的DocumentCompleted事件重复加载
- Webbrowser控件判断网页加载完毕的简单方法
- Webbrowser控件判断网页加载完毕的简单方法
- Webbrowser控件判断网页加载完毕的简单方法
- 谨慎注意WebBrowser控件的DocumentCompleted事件
- Webbrowser控件判断网页加载完毕的简单方法
- Webbrowser控件判断网页加载完毕的简单方法
- Webbrowser控件判断网页加载完毕的简单方法
- 判断页面是否完全载入-对ExtendedWebBrowser的DocumentCompleted再扩展
- [转]Webbrowser控件判断网页加载完毕的简单方法
- 判断webbrowser页面是否完全加载完毕的方法
- Webbrowser控件判断网页加载完毕的简单方法
- Webbrowser控件判断网页加载完毕的简单方法
- WebBrowser控件判断页面加载完毕
- Webbrowser控件判断网页加载完毕的简单方法
- Webbrowser控件判断网页加载完毕的简单方法