博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何解决WebBrowser.DocumentCompleted事件的多次调用
阅读量:5923 次
发布时间:2019-06-19

本文共 1127 字,大约阅读时间需要 3 分钟。

关于DocumentCompleted事件,MSDN给出的解释是在文档加载完毕后执行,但是在我的程序中DocumentCompleted却被多次调用,查了一下资料,大概出现了以下几种情况。

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

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

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

if(e.Url.ToString()!=webBrowser1.Url.ToString())    return;

  

此外,MSDN给出了另外一种方案,详见:

 

3、对于以上两种情况我是没遇到,却碰到了第三种情况:在我的DocumentCompleted事件里执行了相应的代码,结果又触发了一次DocumentCompleted事件,如此循环往复,没完没了。使用webBrowser1.Stop(),还是没法停止。webBrowser1.Nagviate("about:blank")问题还是依旧。这时候我们只能卸载DocumentCompleted事件了,即在DocumentCompleted事件里执行完你需要的代码后,再来一句:

webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);

  

 

转载于:https://www.cnblogs.com/yeminglong/archive/2012/04/09/2438450.html

你可能感兴趣的文章
SxsTrace使用教程(追踪软件运行的详细过程)
查看>>
mysql备份与恢复+ERROR 1046
查看>>
jenkins------部署项目到jboss eap下
查看>>
配置cacti邮件报警,postfix与sendmail冲突
查看>>
如何获取Windows XP完全内存转储文件
查看>>
js闭包
查看>>
FAQ系列 | utf8表存储latin1乱码字符转换
查看>>
深入PHP面向对象、模式与实践
查看>>
Centos中简单配置perl中的CPAN
查看>>
Linux启动流程
查看>>
Redis数据库管理
查看>>
Spring boot webflux 中实现 RequestContextHolder
查看>>
lvs的DR模型工作流程从ip数据层的详细分析
查看>>
linux命令之lsof
查看>>
PL/SQL变量与类型
查看>>
MD3000i存储开机串口输出内容
查看>>
EJB与JAVA BEAN的区别
查看>>
Observable and Promise
查看>>
我的友情链接
查看>>
[转载] 127小时
查看>>