zoukankan      html  css  js  c++  java
  • 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!
    }

  • 相关阅读:
    LWE Open Question
    Lattice Problem
    Small Program about Error Distribution
    Photon Server伺服务器在LoadBalancing的基础上扩展登陆服务
    Photon PUN 三 RPCs & RaiseEvent
    Photon PUN 二 大厅 & 房间
    Photon PUN 一 介绍
    通用麻将胡牌算法
    一款麻将小游戏的准备工作
    ABC203
  • 原文地址:https://www.cnblogs.com/Iyce/p/3174036.html
Copyright © 2011-2022 走看看