• C# DocumentCompleted事件多次被调用的解决方法


    C# DocumentCompleted事件多次被调用的解决方法
    网络文档整理.
    大部分来自这里:http://topic.csdn.net/u/20100308/15/2d0a1313-e308-49d4-b936-1bba86a44b1a.html
    关于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;
       
    3. 使用AxWebBrowser. WebBrowser是AxWebBrowser的部分封装.
    儿子干不了, 当然只能找老子了.
    private void browser_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
    {
    SHDocVw.IWebBrowser2 doc=e.pDisp as SHDocVw.IWebBrowser2;
    if (doc!=(sender as AxSHDocVw.AxWebBrowser).GetOcx())
    return;//still loading other frames

    //code when the load is really finished!
    }

  • 相关阅读:
    【Python】使用socketserver建立一个异步TCP服务器
    阻塞式I/0 和 非阻塞式I/O 同步异步详细介绍
    练习题|并发编程
    log4j写数据库存在单引号问题
    javascript复制网页表格内容
    在cxf中使用配置避免增加字段导致客户端必须更新的问题
    启用了不安全的 HTTP 方法
    会话标识未更新
    跨站点请求伪造
    java操作properties文件
  • 原文地址:https://www.cnblogs.com/Iyce/p/3174036.html
Copyright © 2020-2023  润新知