当前位置:首页 > 计算机相关 > .net专区 > 正文内容

C# webbrower页面是否加载完毕的三个判断方法

piikee10年前 (2012-08-13).net专区93
webbrower最悲剧的就是,每次打开一个页面,里面有多个iframe,那么navigated和completed会执行多次,如何让它只在最后正规页面加载完再执行一次completed事件呢?经过研究总结,基本有如下三种方法:
第一种方法:
////////计数器递增函数////////
public void counteradd(object sender, EventArgs e)
{
counter++;//一次navigated就加一次
}
/////////页面加载完要执行的函数///////////
public void go(object sender, EventArgs e)
{
counter4--;//一次completed就减一次
if (0 == counter4)//等于0表示刚好加载完鸟
{  要干什么就写这里了    }
}
/////////把事件handle一下/////////
this.webBrowser1.Navigated += new System.Windows.Forms.WebBrowserNavigatedEventHandler(counteradd);
this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(go);
第二种方法:
若是一个页面中含有多个框架页,那么在每个框架页加载完成时也可能触发一次DocumentCompleted事务(MSDN对其申明是在多个的帧的景象下DocumentComplete获取触发多次。并非每个框架将触发此事务,但触发DownloadBegin事务的每个框架将触发响应的DocumentComplete事务)。
this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(go);
private void go(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (e.Url.ToString() != webBrowser1.Url.ToString())
return;//不断拒绝,只有URL是webbrowser1的navigate地址才接受
else
{
要干什么就写这里了 }
}
第三种方法:
WebBrowser载入一个页面后DocumentCompleted事务会履行两次,但这两次的ReadyState状况不一样,分别是Intercative和Complete。而MSDN对这两种状况值的申明是:Complete该控件已完成新文档及其所有内容的加载;Interactive该控件已经加载足够的文档以容许有限的用户交互,比如单击已显示的超链接。由此可见,实际上DocumentCompleted事务会在Interactive状况和Complete状况各调用一次,那么我们可以按照我们的须要来断定到底须要那一次。解决办法实例代码如下:
this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(go);
private void go(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if(webBrowser1.ReadyState != WebBrowserReadyState.Complete)
return;
else{ 要干什么就写这里了}
}
基本就三种方法了,在有firame的页面里面,第一种=第二种+第三种,自己想想为什么。再搞不定那就只能god bless you 了,别找piikee了。

扫描二维码推送至手机访问。

版权声明:本文由萍客小居发布,如需转载请注明出处。

本文链接:https://www.piikee.net/943.html

分享给朋友:

相关文章

SQL语句重命名数据库表和表中的列

A.   重命名表将表   oldTableName  重命名为  newTableName :EXEC   sp_rename   'oldTableName','newTableName'B.   重命名列将表 EMIS  中的列  ...

div中英文无法自动换行的解决办法

问题:在一个设定好宽度的div中,当我们输入的中文文字长度超过了设定宽度时,会自动换到下一行。但是,如果输入的是英文字母,那么,无论你div设定宽度为多少,英文字母都是不换行直接在同一行输出,导致div的宽度远远超出设定的大小。原因:这是因...

zedgraph

ZedGraph官方主页:http://zedgraph.org/wiki/index.php?title=Main_PageZedGraph下载地址:http://sourceforge.net/projects/zedgraph/fil...

在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。

C#窗体的多线程一直是个难题,总是要出现奇奇怪怪的错误。今天开发alexSEO软件时,出现了在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。主要出现问题代码如下:public   void runSEO(){...

C#重写WndProc 方法实现无法关闭的窗体

在窗体的设计文件Form1.Designer.cs中重写WndProc 方法 ,实现拦截窗体特定消息。代码如下:protected override void WndProc(ref System.Windows.Forms.Message...

C#中Split分隔字符串【用字符分隔和字符串分割】

C#中Split分隔字符串的应用1、用字符串分隔:using System.Text.RegularExpressions;string str="www.ruohuai.com||www.piikee.net||www.orz123.co...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。