2012-10-15 70 views
0

我正在使用Windows窗體應用程序進行我的線程演示。當我點擊button1時,它會啓動線程並遞歸地執行一項工作。Windows窗體應用程序,線程不會停止

這裏窗體不會像我預期的那樣掛起。我想在點擊Button2時停止當前正在運行的線程。但是這不會起作用。

 private void button1_Click(object sender, EventArgs e) 
     { 
      t = new Thread(doWork);   // Kick off a new thread 
      t.Start();    
     } 

     private void button2_Click(object sender, EventArgs e) 
     {     
      t.Abort(); 
     }  

     static void doWork() 
     {  
      while (true) 
      { 
       //My work  
      } 
     } 
     } 

。在進行調試時,button2_Click方法不會觸及指針。我認爲,因爲線程保持繁忙。

如果我在某個地方出錯,請糾正我。

+0

定義「將無法正常工作」 - 到底發生了什麼和什麼是你期待發生什麼? – Justin

+0

對不起。我用定義來編輯帖子。 Tx發表評論。 :) – devan

+0

@devan:什麼指針? – dotNETbeginner

回答

6

你不能像這樣殺死線程。原因是爲了避免在鎖定線程中添加鎖定然後在釋放鎖定之前將其殺死的情況。

您可以創建全局變量並使用它來控制您的線程。

簡單的例子:

private volatile bool m_StopThread; 

private void button1_Click(object sender, EventArgs e) 
{ 
    t = new Thread(doWork);   // Kick off a new thread 
    t.Start();    
} 

private void button2_Click(object sender, EventArgs e) 
{     
    m_StopThread = true; 
}  

static void doWork() 
{  
    while (!m_StopThread) 
    { 
      //My work  
    } 
} 
+0

可能不是一個好主意來殺死一個線程,但它是不切實際的檢查你的'全局變量'每個方法內部的方法,特別是當方法太長,並且主要不依賴於任何循環構造時。 – dotNETbeginner

+0

你的回覆。但這種方式沒有用,因爲button2_click方法不會被執行者擊中。我認爲這是其他問題。 – devan

+0

@devan Button1啓動新線程,當您單擊button2時,您將變量分配給另一個線程可見的變量。這裏有什麼問題? – Leri

相關問題