在MyClass的构造函数中,动态创建一个WebBrowser,并指定OnDocumentComplete事件处理函数public MyClass
{
  public bool IsFinished;
  ....  public MyClass{            
    _WebBrowser = new WebBrowser();
    _WebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(this.OnComplete);
  }  public Navigate()
  {
    _WebBrowser.Navigate("www.sina.com.cn");
  }  public void OnComplete(object sender, WebBrowserDocumentCompletedEventArgs e)
  {
    IsFinished = true;
  }
}
上面的MyClass保存在单独的cs文件中。
主界面上,通过Button的Click来调用。
MyClass cls = new MyClass();
cls.Navigate();while(!cls.IsFinished) //这里
{
   Thread.Sleep(1000);
}MessageBox.Show("Has Finished");
现在的问题是:
跟踪调试,如果while(cls.IsFinish)及以下注释掉,Navigate完毕以后,OnComplete事件执行;如果不注释,跟踪不到OnComplete事件。请问这是为什么?如何解决?谢谢!

解决方案 »

  1.   

    动态创建的WebBrowser回不回执行JS的函数的
      

  2.   

    Thread.Sleep(1000); 换成System.Windows.Forms.Application.DoEvents();sleep 整个主线程就死掉了相当于整个主线程所有处理暂停
    ,包括消息处理等。不是适合在主窗口线程内使用;
      

  3.   

    你如果就是想等待加载后做一些事情
    可以不用 DocumentCompleted 代码如下?
    wb = new WebBrowser();
    wb.ScriptErrorsSuppressed = true;
    wb.Navigate("www.sina.com.cn");while (wb.ReadyState != WebBrowserReadyState.Complete)
    {
    System.Windows.Forms.Application.DoEvents();
    }//....加载完成写你的代码
      

  4.   

    然后立刻把 WebBrowser 销毁即可;
      

  5.   

    while (snapBrowser.ReadyState != WebBrowserReadyState.Complete)
    {
    Application.DoEvents();
    Thread.Sleep(5);
    }