栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#中WebBrowser.DocumentCompleted事件多次调用问题解决方法

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/125747.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号