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

相关文章

  • Unity UGUI的Dropdown下拉菜单组件使用详解

    Unity UGUI的Dropdown下拉菜单组件使用详解

    这篇文章主要为大家介绍了Unity UGUI的Dropdown下拉菜单组件使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • C#操作SQLite实现数据的增删改查

    C#操作SQLite实现数据的增删改查

    SQLite是一个轻量级、跨平台的关系型数据库,在小型项目中,方便,易用,同时支持多种开发语言。本文将用C#语言对SQLite 的一个封装,实现数据的增删改查。需要的可以参考一下
    2022-01-01
  • c#制作屏幕保护程序步骤(字幕屏保)

    c#制作屏幕保护程序步骤(字幕屏保)

    本文介绍使用C#制作屏幕保护的方法,这个屏幕保护就是仿效视窗系统自带的字幕屏保。下面是用C#如何编写屏幕保护的整个过程
    2014-01-01
  • C# 使用 GDI+ 实现添加中心旋转(任意角度)的文字

    C# 使用 GDI+ 实现添加中心旋转(任意角度)的文字

    这篇文章主要介绍了C# 使用 GDI+ 实现添加中心旋转(任意角度)的文字,需要的朋友可以参考下
    2018-04-04
  • WPF实现树形表格控件的示例代码

    WPF实现树形表格控件的示例代码

    这篇文章主要介绍了如何利用WPF框架实现树形表格控件,该控件不仅能够有效地展示复杂的层级数据,还能够提供丰富的个性化定制选项,感兴趣的可以了解下
    2024-04-04
  • UnityShader使用速度映射图实现运动模糊

    UnityShader使用速度映射图实现运动模糊

    这篇文章主要为大家详细介绍了UnityShader使用速度映射图实现运动模糊,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C# 获取指定QQ头像绘制圆形头像框GDI(Graphics)的方法

    C# 获取指定QQ头像绘制圆形头像框GDI(Graphics)的方法

    某论坛的评论区模块,发现这功能很不错,琢磨了一晚上做了大致一样的,用来当做 注册模块 的头像绑定功能,下面通过实例代码给大家介绍下C# 获取指定QQ头像绘制圆形头像框GDI(Graphics)的方法,感兴趣的朋友一起看看吧
    2021-11-11
  • C#中进程的挂起与恢复

    C#中进程的挂起与恢复

    这篇文章主要介绍了C#中进程的挂起与恢复操作方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • C#给PDF文件添加水印

    C#给PDF文件添加水印

    这篇文章主要为大家详细介绍了C#给PDF文件添加水印的相关代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • C# ComboBox下拉框实现搜索方式

    C# ComboBox下拉框实现搜索方式

    文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教
    2024-12-12

最新评论