日期:2014-05-17  浏览次数:20917 次

多线程下调用类的使用问题
在程序中使用子线程来运行负责 网络下载部分 子程调用类的主要运行的代码 

  class WebBrowserClass
  {
  WebBrowser myWebPage = new WebBrowser();//
  Timer Monitor = new Timer();


  public void StartWebBrowser(string Url) 
  {
  myWebPage.ScrollBarsEnabled = true;
  myWebPage.ScriptErrorsSuppressed = false;
  myWebPage.Navigate(Url);
  Monitor.Interval = 3000;
  Monitor.Tick += new EventHandler(Monitor_Tick);
  Monitor.Start();
  }

  private void Monitor_Tick(object sender, EventArgs e)
  {
  if (myWebPage.IsBusy == false && myWebPage.StatusText == "完成")
  {
  BookInfor.StaticClass.WebPageHtml = myWebPage.Document.Body.OuterHtml;
  BookInfor.StaticClass.flag = true;
  Monitor.Stop();
  }
  }

   
  }


子线程调用的代码
  WebBrowserClass WBC = new WebBrowserClass();
  WBC.StartWebBrowser(Url);

主要想实现子线程调用类的 StartWebBrowser(string Url) 方法,使用控件WebBrowser.Navigate(Url)方法加载网页,再用触发器每间隔3秒判断WebBrowser控件中的页面是否加载完成。

问题是调用后我的 Monitor_Tick 事件不触发,需要怎么改呢?

------解决方案--------------------
我在你另一个帖子里面回复了。
因为你使用的Timer是名字空间System.Windows.Forms.Timer下的,他不支持多线程操作。
而System.Timers.Timer名字空间下的Timer才支持多线程操作。
把这个换了就OK。