none
如何判断WebBrowser加载完毕 RRS feed

  • 问题

  • 使用browser1.ReadyState == WebBrowserReadyState.Complete && !IsBusy 有时可以,有时不可以。
    使用以下方法也是有问题的,我这里twriter.com是无法访问的,如果twriter.com和tom.com位置换下,会很快的出现step2 complete。实际上twriter还没有加载完就转向到tom去了。因为我的功能是WebBrowser导航到url1,加载完毕,程序进行相关处理。导航到url2,加载完毕,程序进行相关处理。。。。
    但如何判断WebBrowser加载完毕,而且等到他加载完毕再导航到其他url?

       private void Step1(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                textBox1.Text = "step1 complete\r\n";
            }

            private void Step2(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                textBox1.Text += "step2 complete";
            }

            private void button1_Click(object sender, EventArgs e)
            {

                Browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Step1);
                Browser.Navigate("http://tom.com");
                Browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Step2);
                Browser.Navigate("http://twriter.com");
            }

    2011年4月8日 0:05

答案

  • 等DocumentCompleted触发之后再在url队列中取一个浏览

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月8日 2:06
    版主
  • 你好!

    参考我下面的例子

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
          Initialize();
          BeginNavigate();
        }
    
        WebBrowser wb;
        List<string> queue = new List<string>() { "http://www.163.com", "http://www.sina.com.cn" };
        int queueIndex = 0;
        void Initialize()
        {
          wb = new WebBrowser();
          wb.Dock = DockStyle.Fill;
          wb.DocumentCompleted += (o, e) =>
          {
            // 判断是否是第一次加载,或是否指定的 url 中所有的 iframe 都加载完成。
            var url = e.Url.ToString();
            if (url == "about:blank" ||
              url == queue[queueIndex])
              BeginNavigate();
          };
          this.Controls.Add(wb);
        }
    
        /// <summary>
        /// 延时导航到新的 url 以达到测试的效果
        /// </summary>
        void BeginNavigate()
        {
          using (BackgroundWorker bg = new BackgroundWorker())
          {
            bg.DoWork += (o, e) => { System.Threading.Thread.Sleep(5000); };
            bg.RunWorkerCompleted += (o, e) =>
            {
              wb.Navigate(queue[queueIndex]);
              queueIndex = (queueIndex >= queue.Count - 1) ? 0 : (queueIndex + 1);
            };
    
            bg.RunWorkerAsync();
          }
        }
      }
    }
    
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 ogra 2011年4月8日 2:57
    2011年4月8日 2:21
    版主

全部回复

  • 等DocumentCompleted触发之后再在url队列中取一个浏览

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月8日 2:06
    版主
  • 你好!

    参考我下面的例子

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
          Initialize();
          BeginNavigate();
        }
    
        WebBrowser wb;
        List<string> queue = new List<string>() { "http://www.163.com", "http://www.sina.com.cn" };
        int queueIndex = 0;
        void Initialize()
        {
          wb = new WebBrowser();
          wb.Dock = DockStyle.Fill;
          wb.DocumentCompleted += (o, e) =>
          {
            // 判断是否是第一次加载,或是否指定的 url 中所有的 iframe 都加载完成。
            var url = e.Url.ToString();
            if (url == "about:blank" ||
              url == queue[queueIndex])
              BeginNavigate();
          };
          this.Controls.Add(wb);
        }
    
        /// <summary>
        /// 延时导航到新的 url 以达到测试的效果
        /// </summary>
        void BeginNavigate()
        {
          using (BackgroundWorker bg = new BackgroundWorker())
          {
            bg.DoWork += (o, e) => { System.Threading.Thread.Sleep(5000); };
            bg.RunWorkerCompleted += (o, e) =>
            {
              wb.Navigate(queue[queueIndex]);
              queueIndex = (queueIndex >= queue.Count - 1) ? 0 : (queueIndex + 1);
            };
    
            bg.RunWorkerAsync();
          }
        }
      }
    }
    
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 ogra 2011年4月8日 2:57
    2011年4月8日 2:21
    版主