C#中WebBrowser.DocumentCompleted事件多次调用问题解决方法
关于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;
此外,msdn给出了另外一种方案,详见:
3、对于以上两种情况我是没遇到,却碰到了第三种情况:在我的documentcompleted事件里执行了相应的代码,结果又触发了一次documentcompleted事件,如此循环往复,没完没了。使用webbrowser1.stop(),还是没法停止。webbrowser1.nagviate("about:blank")问题还是依旧。这时候我们只能卸载documentcompleted事件了,即在documentcompleted事件里执行完你需要的代码后,再来一句:
webbrowser1.documentcompleted -= new webbrowserdocumentcompletedeventhandler(webbrowser1_documentcompleted);
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
-
C#实现猜数字游戏
本文实例为大家分享了c#实现猜数字游戏具体代码,供大家参考,具体内容如下给定一个0-100的随机数字猜其大小题目样式:电脑产生一个0到100之间的随机数字,并且...
[阅读全文]
-
-
C# 可空类型的具体使用
在项目中我们经常会遇到可为空类型,那么到底什么是可为空类型呢?下面我们将从4个方面为大家剖析。1、可空类型基础知识顾名思义,可空类型指的就是某个对象类型可以为空...
[阅读全文]
-
-
-
C#实现猜数字小游戏
本文实例为大家分享了c#实现猜数字小游戏的具体代码,供大家参考,具体内容如下效果如图:代码:using system;using system.collecti...
[阅读全文]
-
-
C#实现简单俄罗斯方块
最近在看《.net游戏编程入门经典 c#篇》 第一章介绍了如何制作俄罗斯方块,自己试了试按照书上的步骤,可算是完成了。于是写下这篇文章留作纪念。1.类的设计在充...
[阅读全文]
-
网友评论