• 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!
    }

  • 相关阅读:
    HDU
    2019CCPC秦皇岛自我反省&部分题解
    图论之二分图相关内容
    图论之一般图相关内容
    2019 南昌ICPC网络赛H The Nth Item
    HDU 5486 Difference of Clustering 暴力模拟
    图论之tarjan真乃神人也,强连通分量,割点,桥,双连通他都会
    数论之二次剩余
    没有哈密瓜只有哈密顿----图论之哈密顿回路
    面试题整理:C#(二)
  • 原文地址:https://www.cnblogs.com/Iyce/p/3174036.html
Copyright © 2020-2023  润新知