2011-07-13 50 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的定義,在我剛剛關閉的形式