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

 更新时间:2015年01月23日 10:07:05   投稿:junjie  
这篇文章主要介绍了C#中WebBrowser.DocumentCompleted事件多次调用问题解决方法,本文讲解了3种情况和各自情况的解决方法,需要的朋友可以参考下

关于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#实现简单的二维码和条形码的生成工具

    这篇文章主要为大家详细介绍了如何基于C#实现简单的二维码和条形码工具,用于二维码条形码的生成与识别,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C#实现计算器精简版

    C#实现计算器精简版

    这篇文章主要为大家详细介绍了C#实现计算器精简版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • WinForm实现状态栏跑马灯效果的方法示例

    WinForm实现状态栏跑马灯效果的方法示例

    这篇文章主要介绍了WinForm实现状态栏跑马灯效果的方法,涉及WinForm控件结合时间函数动态操作元素属性的相关技巧,需要的朋友可以参考下
    2017-07-07
  • 一文带你吃透C#中面向对象的相关知识

    一文带你吃透C#中面向对象的相关知识

    这篇文章主要为大家详细介绍了C#中面向对象的相关知识,文中的示例代码讲解详细,对我们学习C#有一定的帮助,需要的小伙伴可以参考一下
    2023-02-02
  • C#读写注册表的思路及代码

    C#读写注册表的思路及代码

    这篇文章主要介绍了C#读写注册表的思路及代码,有需要的朋友可以参考一下
    2013-12-12
  • Unity实现动物识别的示例代码

    Unity实现动物识别的示例代码

    本文主要介绍了如何通过Unity实现动物识别,可以实现识别近八千种动物,接口返回动物名称,并可获取识别结果对应的百科信息,感兴趣的可以了解一下
    2022-02-02
  • C# 获取动态key的json对象的值案例

    C# 获取动态key的json对象的值案例

    这篇文章主要介绍了C# 获取动态key的json对象的值案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 基于C#实现文件伪装技术

    基于C#实现文件伪装技术

    这篇文章主要为大家详细介绍了如何基于C#实现文件伪装功能,将一般文件夹伪装成计算机,控制面板,打印机等,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • C#仿Windows XP自带的扫雷游戏

    C#仿Windows XP自带的扫雷游戏

    这篇文章主要为大家详细介绍了C#仿Windows XP自带的扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • C# 在PDF中添加墨迹注释Ink Annotation的步骤详解

    C# 在PDF中添加墨迹注释Ink Annotation的步骤详解

    PDF中的墨迹注释表现为徒手涂鸦式的形状,该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线,下面通过C#程序代码介绍下在pdf中添加注释的步骤,感兴趣的朋友一起看看吧
    2022-02-02

最新评论