2011-07-13 51 views
0

线程退出不从Form2的工作出境线程不工作从窗口2

private void button1_Click(object sender, EventArgs e) 
{ 
    ThreadStart myThreadDelegate = new ThreadStart(RunExitForm2); 
    Form2 f2 = new Form2(); 
    Thread MyThread = new Thread(myThreadDelegate); 
    f2.ShowDialog(); 
    MyThread.Start(); 

} 
private void RunExitForm2() 
{ 
    Form2 f2 = new Form2(); 
    f2.Close(); 
} 

回答

3

编辑:

你可能最好把Form2上一个Timer 2秒后,将关闭窗口它打开。工具箱上的图标看起来像秒表。在属性窗口中,设置Interval=2000Enabled=True,然后订阅Tick事件,并说this.Close();

void timer1_Tick(object sender, EventArgs ea) 
{ 
    this.Close(); 
} 

原来的答复:

对于初学者来说,你通常无法与System.Windows.Forms的东西与淤泥工作者线程。你需要使用UI“消息循环”线程。

另一个问题是线程直到你关闭第一个窗口才会启动(因为.ShowDialog()。工作线程消息向上形成一个窗体(但从不显示它),然后关闭它(但它没有打开) ,所以它永远不会无论如何出现。

+0

什么“消息循环” – jackStonre

+0

通过“消息循环”线程,我的意思是应用程序运行在主线程。窗口显示的线程。 –

+0

如何创建“消息循环” – jackStonre

0

是像你这样是什么意思?

private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 frmTest = new Form2(); 

     System.Threading.ThreadPool.QueueUserWorkItem(f => 
     { 
      // easy to see the effect... 
      System.Threading.Thread.Sleep(1000); 

      Form2 me = f as Form2; 
      this.BeginInvoke(new Action(() => { 
       me.Close(); 
      })); 

     }, frmTest); 

     frmTest.ShowDialog(); 
    } 
+0

我不认为它是一个好主意的工作线程直接做任何GUI的东西,如关闭窗体 – MickyD

+0

我认为如果试图在第一次创建启动画面对于仆人秒......你想控制在外面的等待时间....并且也关闭它在同一个地方.... :) – shenhengbin

+0

你仍然可以做到这一点,只需使用Timer()组件主屏幕或闪屏。 – MickyD

0

看着你正在创建窗体2的两个实例代码,试图关闭您创建一个新的实例。

还有一点,即使你只有一个立场,你正在主线程上创建一个表单并试图在不同的工作线程上关闭它,你会得到交叉线程异常。

让我知道什么是你的要求。正如前面在这篇文章中所提到的,它不是一个好主意,让工作线程访问UI元素

这就是我会做

私人无效的button1_Click(对象发件人,EventArgs的) { 的ThreadStart myThreadDelegate =新的ThreadStart(RunExitForm2);

 Thread MyThread = new Thread(myThreadDelegate); 
     MyThread.Start(); 
     f2.ShowDialog(Application.OpenForms[0]); 



    } 

    private void RunExitForm2() 
    { 
     Thread.Sleep(10000); 

     test t = new test(f2.CloseForm2); 


     if (InvokeRequired) 
     { 
      BeginInvoke(t); 
      return; 
     } 

    } 

这里测试是委托方法Closeform2在Form2的定义,在我刚刚关闭的形式