2010-12-09 202 views
4

我從一個項目下面的代碼片段我的工作:殺死一個線程

public void Start() 
     { 
     Thread t = new Thread(NotifyIfNecessary); 
     Threads.Add(t); 
     t.Start(); 
     t.Abort()); 

     } 

我想是該線程「T」應該執行方法NotifyIfNecessary和方法完成後才中止執行。在我當前的代碼中,t.Abort()會被提前調用。

+1

是否有中止線程的原因?無論如何,線程應該在方法完成執行後自動結束。 – 2010-12-09 15:30:40

+0

是啊......似乎我錯過了這個事實,即線程會在方法執行後自行中止。謝謝。既然你們都說過一樣,upvoted所有和第一個答案將是最好的答案。再次感謝。 – xbonez 2010-12-09 15:32:58

回答

6

這是由於您正在創建一個新線程並將其啓動,然後立即通過調用Thread.Abort()方法將其從剛剛創建的線程中刪除而引起的。你不需要這樣做;當NotifyIfNecessary已完成執行時,您的線程將完成。只要刪除行t.Abort();和您的代碼應該正常工作。

4

您不應該首先調用abort,因爲abort只適用於失敗的用戶代碼(在單獨的appdomain中運行)。在你的情況下,只需讓NotifyIfNecessary運行到完成(即不要中止)。完成。

但是,也許你真的想要做的是,直到NotifyIfNecessary完成後,你的主線程纔會繼續。如果是這種情況,請調用線程「加入」。

3

您不需要調用Abort,因爲當NotifyIfNecessary結束時,線程將自動停止。

3

如果您希望NotifyIfNecessary完成,請不要中止該線程。如果您希望函數只在完成NotifyIfNecessary後繼續使用連接,或者不要在另一個線程中調用該函數。

3

我不認爲有需要致電Abort()。一旦NotifyIsNeccessary完成,線程將完成。您是否期待在Start()結束時等待線程完成?