C#:如何解决WebBrowser.DocumentCompleted事件的屡次调用

关于DocumentCompleted事件,MSDN给出的解释是在文档加载完毕后执行,可是在个人程序中DocumentCompleted却被屡次调用,查了一下资料,大概出现了如下几种状况。html


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

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

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

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

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

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

webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);

转载自:http://www.cnblogs.com/rchlz/archive/2009/02/27/1399274.htmlspa

相关文章

WebBrowser.DocumentCompleted 事件code

WebBrowser 类orm

WebBrowser.Url 属性htm

WebBrowser.Navigate 方法blog

相关文章
相关标签/搜索