昨天晚上问了多线程编程的问题,实现代码如下:
System.Threading.Thread myThread1 ;
delegate void OpenFile2 ();private void Form1_Load(object sender, System.EventArgs e)
{myThread1 = new System.Threading.Thread(new System.Threading.ThreadStart(threadone));
myThread1.Start();
}
private void threadone()
      {
    this.axWebBrowser1.Invoke (new  OpenFile2(test));}
private void test()但是我用这个多线程方法启动一个主窗口中axWebBrowser1.Navigate(。。)的加载文件过程时,主窗口还是好象背定住了一样,无法响应其他事件,跟没用多线程方法编程效果差不多,这是为什么
有没有哪位大仙可以解释的

解决方案 »

  1.   

    这是正常的,用了invoke之后,invoke的功能就是挂在窗口线程中了,在invoke执行完以前,窗口当然也就不能动了。建议这样做: 
    1、先在线程中,把数据读取到变量(这时窗口是可以动的)。2、调用invoke显示数据(这时窗口是不能动的,因为你正在修改窗口上的控件数据。 建议用invoke,否则在线程中直接修改窗口效率会很低)。
      

  2.   

    这跟你是否用多线程没关系,因为axWebBrowser1.Navigate方法本身就是异步的。建议你检查一下其他地方。
      

  3.   

    To qpl007(蓝色闪电)
    我觉得应该不是的,比如你用IE打开一个很大的WORD文件,在打开的过程中,该IE窗口是无法响应其他事件的,同样axWebBrowser1跟IE是同一个概念(我个人觉得是这样的)
    我的axWebBrowser1加载文件的代码如下,请各位大仙帮帮忙,有什么错误
    Object refmissing = System.Reflection.Missing.Value;
    oDocument = null;
    axWebBrowser1.Navigate(zaddress, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
    //zaddress是文件地址
      

  4.   

    Object refmissing = System.Reflection.Missing.Value;
    oDocument = null;
    axWebBrowser1.Navigate(zaddress, ref refmissing , ref refmissing , ref refmissing , ref refmissing);->object temp=null;
    string pagePath = "http://www.csdn.net";
    axWebBrowser1.Navigate(pagePath ref temp,ref temp,ref temp,ref temp);
      

  5.   

    axWebBrowser1.Navigate(pagePath ref temp,ref temp,ref temp,ref temp);
    ->
    axWebBrowser1.Navigate(pagePath,ref temp,ref temp,ref temp,ref temp);