C# DocumentCompleted事件多次被调用的解决方法

C# DocumentCompleted事件多次被调用的解决方法
网络文档整理.
大部分来自这里:http://topic.csdn.net/u/20100308/15/2d0a1313-e308-49d4-b936-1bba86a44b1a.html
关于DocumentCompleted事件,MSDN给出的解释是在文档加载完毕后执行,但是在我的程序中DocumentCompleted却被多次调用,查了一下资料,大概出现了以下几种情况。


1、WebBrowser载入一个页面后DocumentCompleted事件会执行两次,但这两次的ReadyState状态不一样,分别是Intercative和Complete。而MSDN对这两种状态值的解释是:Complete该控件已完成新文档及其所有内容的加载;Interactive该控件已经加载足够的文档以允许有限的用户交互,比如单击已显示的超链接。由此可见,实际上DocumentCompleted事件会在Interactive状态和Complete状态各调用一次,那么我们可以根据我们的需要来判断到底需要那一次。解决办法实例代码如下:


if(webBrowser1.ReadyState!=WebBrowerReadyState.Complete)
    return;
 

2、如果一个页面中含有多个框架页,那么在每个框架页加载完成时也可能触发一次DocumentCompleted事件(MSDN对其解释是在多个的帧的情况下DocumentComplete获取触发多次。并非每个框架将触发此事件,但触发DownloadBegin事件的每个框架将触发相应的DocumentComplete事件)。这种情况下解决办法实例代码如下:


if(e.Url.ToString()!=webBrowser1.Url.ToString())
    return;
   
3. 使用AxWebBrowser. WebBrowser是AxWebBrowser的部分封装.
儿子干不了, 当然只能找老子了.
private void browser_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
SHDocVw.IWebBrowser2 doc=e.pDisp as SHDocVw.IWebBrowser2;
if (doc!=(sender as AxSHDocVw.AxWebBrowser).GetOcx())
return;//still loading other frames

//code when the load is really finished!
}

转载于:https://www.cnblogs.com/Iyce/p/3174036.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值