我在主线程中新建一个线程,并在该线各中创建了一个窗体,可是,运行后,这个新的窗体却闪一下就消失了,这是怎么回事?而网上有人说用invoke方法,才发现调用该方法创建出来的窗体不会消失,这是什么原因呀?请大家最好解释的通俗点,谢谢!

解决方案 »

  1.   

    是这个原因吗?可是那为什么用invoke
    delegate void FormHandler(string rec);//
    private void newform2(string rec) 

    if (!this.InvokeRequired)  

    Form2 fb = new Form2(); 
    fb.listBox1.Items.Add(rec);
    fb.Show(); 
    }  else 

    FormHandler fHandler = new FormHandler(this.newform2); 
    this.Invoke(fHandler,new object[]{rec}); //启动delegate 
    }
    }
    却可以使用呢?
    我是在一个新的线程中调用了这个newform2,可是运行完这些话,窗体并没消失
      

  2.   

    使用了Control.Invoke以后,方法是在创建这个控件的线程上运行的,因此,新创建的窗体也会在主窗体的线程上,自然就不会消失了。
      

  3.   

    invoke 通知创建该控件的线程 要调用委托拉~
      

  4.   

    这样说吧,A是你的线程,B是你的方法,当你用A创建窗体后,窗体是隶属线程A的,当A运行完毕后,垃圾回收机制会回收A,窗体作为子项也会被回收了.
    invoke是委托别的方法(B)去完成窗体建立,也就是窗体是隶属于B的,当A被回收了,对B没有任何影响.
    当然,如果是把A挂起,不让它结束,窗体还是存在的.