zoukankan      html  css  js  c++  java
  • webBrowser1_DocumentCompleted不停被调用

    我在webBrowser1_DocumentCompleted不停被调用里写了些代码,用于填写一个表单,并向服务器提交。

    但是webBrowser1_DocumentCompleted不停被调用,页面不停被刷新,不知道什么原因。网上找了找,有类似问题:

    比如这么一篇文章如何解决WebBrowser.DocumentCompleted事件的多次调用 (http://www.cnblogs.com/rchlz/archive/2009/02/27/1399274.html)

    我用了这篇文章中第三个方法,就是在执行完我的代码之后,把webBrowser1_DocumentCompleted卸载掉,呵呵,很糙的方法。

    文章转帖如下:

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

  • 相关阅读:
    mysql基础(三)存储引擎和锁
    为给定字符串生成MD5指纹
    区块链基本原理,Part-2:工作量证明和权益证明
    区块链基本原理,Part-1:拜占庭容错
    区块链挖矿 2.0
    以太坊 2.0 中的验证者经济模型,Part-2
    以太坊 2.0 中的验证者经济模型,Part-1
    Java归并排序之递归
    Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
    Java棋盘覆盖问题
  • 原文地址:https://www.cnblogs.com/zhwl/p/3154514.html
Copyright © 2011-2022 走看看