现在一个窗体A,开了一个线程line1
另有一个窗体B,和一个窗体C.
在A窗体的一个按钮click事件中写入下面的代码:private void button4_Click(object sender, EventArgs e)
{
  Thread MyThreadOne = new Thread(new ThreadStart(mythreading));
  MyThreadOne.Start();
  B myformb=new B();
  myformb.show();
  this.hide();
}public void mythreading()
{
    C mywait = new C();
    mywait.Show();
}
执行button4_Click后,
B窗体出现了,但是C窗体却闪了一下就关闭了.如何才使C窗体不关呢?///这里主要是执行了"this.hide();"后关闭的.
以上的例子可能无意义,我只是想通过它了解线程的使用.希望高手指教.如何在执行
  Thread MyThreadOne = new Thread(new ThreadStart(mythreading));
  MyThreadOne.Start();
  myformb.show();
  this.hide();
后,C窗体也不关闭.

解决方案 »

  1.   

    C窗体关闭是因为线程执行完mythreading方法後,该线程就自动消亡了. 这样mywait对象成了垃圾,
    所以垃圾收集器回收了mywait对象导至C窗体关闭.lz可以这样试试:
    private static object sync=new object();
    private C mywait=null;
    public void mythreading()
    {
        lock(sync)   //这个是线程同步用的.
        {
          if (mywait==null)
               mywait=new C();
           mywait.Show();
        }
      

  2.   

    或者你这样写
    private void button4_Click(object sender, EventArgs e) 

     B myformb=new B(); 
      myformb.show(); 
      this.hide(); 
      Thread MyThreadOne = new Thread(new ThreadStart(mythreading)); 
      MyThreadOne.Start(); 

    看是什么情况
      

  3.   

    哦..好像是Windows窗口消息的原因,你这样改下试试:        public void mythreading()
            {
                C mywait = new C();
               
                Application.Run(mywait);
            } 
      

  4.   

         
        6楼正解!   public void mythreading()
            {
                C mywait = new C();
               
                Application.Run(mywait);
            } 
      

  5.   

    private void button4_Click(object sender, EventArgs e) 

      Thread MyThreadOne = new Thread(new ThreadStart(mythreading)); 
      MyThreadOne.Start(); 
      B myformb=new B(); 
      myformb.show(); 
      this.hide(); 
    private delegate void ShowEvent();
    public void mythreading() 

       ShowEvent dd = delegate
       {   
     
          C mywait = new C(); 
          mywait.Show(); 
       };
       this.Invoke(dd);

    用一个委托提升到当前线程
      

  6.   

    C mywait; 
    public void mythreading() 

    mywait = new C(); Application.Run(mywait); 
    } 窗口打开后, 
    执行 
    Thread MyThreadOne = new Thread(new ThreadStart(mythreading)); 
    MyThreadOne.Start(); C窗体打开了.
    但是我想关闭它.执行:
    mywait.close(); 
    出错. 
    线程间操作无效: 从不是创建控件“wait”的线程访问它。
      

  7.   

    线程与窗体交互最好使用消息机制,具体操作在WndProc方法里
    protected override void WndProc(ref System.Windows.Forms.Message msg)
    {
    base.WndProc(ref msg);
    switch(msg.Msg)
    {
    case 0x9000 :
         C mywait = new C(); 
         mywait.Show(); 
         break;
    default:
         break;
    }
    }private void button4_Click(object sender, EventArgs e) 

      Thread MyThreadOne = new Thread(new ThreadStart(mythreading)); 
      MyThreadOne.Start(); 
      B myformb=new B(); 
      myformb.show(); 
      this.hide(); 
    } public void mythreading() 

        Win32Api.SendMessage(this.Handle.ToInt32(), 0x9000, 0, 0);