WebBrowser控件判断完全加载使用DocumentCompleted是有问题的,所以有人提出可以使用判断DocumentCompleted的次数和Navigated次数完全相等的方法判断是否完全加载

并提出每次都会Navigated在DocumentCompleted之前执行,

此方案在本人测试后发现此两事件没有必然关系,并且也没先后次序

测试原理:

定义2个全局变量用于记录两事件次数,并使用一个计时器,即时判断当前两全局变量

如果最后两个值不相等,那么两事件不是同时必然发生,

如果出现同一时刻 DocumentCompleted的次数大于Navigated,那么前者就不一定是在Navigated之后执行了,不能确定两者的顺序关系

测试代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
 
using System.Configuration;
using System.Web;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text.RegularExpressions;
 
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
 
using mshtml;
 
using SHDocVw;
 
namespace TestCrass
{
    public partial class Form5 : Form
    {
        System.Timers.Timer time = new System.Timers.Timer();
 
        int qunue = 0;//当前轮次
        int ced = 0;//DocumentCompleted次数
        int ned = 0;//Navigated次数
        int ning = 0;//Navigating次数
        public Form5()
        {
            InitializeComponent();
            time.Interval = 10;
            time.Enabled = true;
            time.Elapsed += new System.Timers.ElapsedEventHandler((ss, ee) => { button1_Click(ss,ee); });
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
           
            Invoke((ThreadStart)delegate()
          {
           //此刻ced比ned大,说明DocumentCompleted事件触发次数大于Navigated,所以Navigated可能后发生
                if (ned < ced)
                {
                    label5.Text = "第"+qunue.ToString()+"次有问题"+ned.ToString()+".."+ced.ToString();
                }
                
            });
 
        }
 
 
 
        private void Form5_Load(object sender, EventArgs e)
        {
            webBrowser1.Navigate("http://item.taobao.com/item.htm?id=21926784253");
        }
 
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            ced++;
            label4.Text = "ced" + ced.ToString();
            if (webBrowser1.DocumentText.Contains("无法显示该网页") || webBrowser1.DocumentText.Contains("已取消") || webBrowser1.DocumentText.Contains("可以尝试以下操作"))
            {
                webBrowser1.Refresh();
                return;
            }
            //time.Enabled = true;
            //button1_Click(null, null);
 
 
        }
 
        private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            ned++;
            label3.Text = "ned" + ned.ToString();
        }
 
        private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            ning++;
            qunue++;
            label1.Text = "qunue" + qunue.ToString();
            label2.Text = "ning" + ning.ToString();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            webBrowser1.Navigate(textBox1.Text);
 
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            ced = 0;
            ned = 0;
            ning = 0;
            qunue = 0;
            label1.Text = "";
            label2.Text = "";
            label3.Text = "";
            label4.Text = "";
        }
    }
}

测试淘宝,如之前的错误结论,可以通过测试,

找个复杂点的网站 www.163.com

测试

结果是Navigated次数才33次,还少1次,所以据此说明,之前的他人说法是不对的

据此方法来判断是否加载完也是不对的,

通过多方查找

有一种方法可以完全判断是否加载完成:

正在测试中

转载于:https://www.cnblogs.com/sung/archive/2013/01/07/2849059.html

WebBrowser控件判断完全加载中DocumentCompleted和Navigated的关系相关推荐

  1. C# .NET 6.0已经取消了Framework 4.8的WebBrowser控件,几款NuGet中的浏览器控件介绍

    即使在C# .NET 6.0..NET 7.0在选择工具箱项COM组件添加Microsoft Web Browser,工具箱也没有WebBrowser控件. WebBrowser控件: WebBrow ...

  2. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  3. 安卓案例:列表控件上拉加载更多

    文章目录 一.上拉加载更多使用场景 二.案例演示 - 列表控件上拉加载更多 (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建安卓应用[ListViewLoadMore] 2.将背景图片拷贝到 ...

  4. asp.net读取用户控件,自定义加载用户控件

    1.自定义加载用户控件 ceshi.aspx页面 <html><body> <div id="divControls" runat="ser ...

  5. wps office oa控件 痕迹_WPS加载项案例应用回顾

    2019年的武汉,金山办公召开了第一届开发者大会,主题是「开放赋能.合作共赢」,2020年8月29至30日,在重庆召开了第二届,主题是「在一起.创未来」.上一届发布了WPS PC Office的WPS ...

  6. windowmediaplayer控件出现未能加载的问题

    问题:当添加windowsmediaplayer控件后,有时候会发现窗体设计器出现下图提示,无法加载设计器. 方法:将该方案的属性中生成选项下的平台目标选择anycpu(自己莫名将平台目标设置成X64 ...

  7. FlexCell控件初始化以及加载数据集[原创]

    '================================写在之前的话 抱歉,一直没有时间,所以FlexCell作者给我的几种加载数据集方法的代码一直没有发出来. 同时再次感谢FlexCell ...

  8. 树的懒加载怎么用ajax调接口,ElementUI tree树形控件的懒加载使用

    先看效果: image 1.界面中: :data="treeData" :props="defaultProps" :load="loadNode&q ...

  9. winform窗体控件多,加载慢、卡顿的解决办法

    protected override CreateParams CreateParams{get{CreateParams cp = base.CreateParams;cp.ExStyle |= 0 ...

最新文章

  1. 锁定弹出层(jquery语法)
  2. leetcode514. 自由之路(dp)
  3. linux桌面版自动更新关闭了,桌面应用|开启 Ubuntu 系统自动升级
  4. Centos5.11 使用yum源
  5. css+div导航条样式
  6. [leetcode]5354. 通知所有员工所需的时间
  7. 如何修改默认字体_Excel技巧:怎么修改默认字体为宋体
  8. android仿qq空间、微信朋友圈图片展示
  9. NumPy库---Axis理解
  10. Java后台开发入门
  11. 计算机SCV原理指什么,csv是什么文件格式?.csv文件怎么打开?
  12. 读取npy格式的文件
  13. Foxmail设置雅虎邮箱的方法
  14. 关于想写我与Java的故事,满脑子却都是与JavaCV纠缠不清的那段日子
  15. Win10修复Linux引导
  16. 诊所信息管理系统C语言课程设计
  17. while及do while语句
  18. php 循环 解方程,解方程. 40%X=12080%X-60%X=1.26X+48=168X+20%X=24X-x5=1
  19. matlab 矩阵绘三维图
  20. 2021-2027全球与中国实时操作系统市场现状及未来发展趋势

热门文章

  1. 聊聊单体应用的 4 点不良影响,第 4 点很痛很真实
  2. 服务部署如何做到高可用?这份“三级跳”秘籍送给你
  3. Android 面试 - 有关Service的面试题
  4. php防止重复结算问题_PHP 编写关系到财务这样重要的系统,设计应该每次变动都算账,还是月底统一算账?...
  5. mysql子查询缺点_[慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时
  6. linux 普通用户crond,linux下普通用户的定时任务
  7. 国内数据中心分布及供电系统概述
  8. 模块化数据机房具备的五大优势
  9. 带你看看获得鲁班奖的数据中心工程建设的有多完美!!
  10. Computer:成功解决安装软件时需要系统空间环境辅助程序(比如Microsoft Visual C++2010 x86 Redistributable安装失败)