我從一個項目下面的代碼片段我的工作:殺死一個線程
public void Start()
{
Thread t = new Thread(NotifyIfNecessary);
Threads.Add(t);
t.Start();
t.Abort());
}
我想是該線程「T」應該執行方法NotifyIfNecessary和方法完成後才中止執行。在我當前的代碼中,t.Abort()會被提前調用。
我從一個項目下面的代碼片段我的工作:殺死一個線程
public void Start()
{
Thread t = new Thread(NotifyIfNecessary);
Threads.Add(t);
t.Start();
t.Abort());
}
我想是該線程「T」應該執行方法NotifyIfNecessary和方法完成後才中止執行。在我當前的代碼中,t.Abort()會被提前調用。
這是由於您正在創建一個新線程並將其啓動,然後立即通過調用Thread.Abort()
方法將其從剛剛創建的線程中刪除而引起的。你不需要這樣做;當NotifyIfNecessary
已完成執行時,您的線程將完成。只要刪除行t.Abort();
和您的代碼應該正常工作。
您不應該首先調用abort,因爲abort只適用於失敗的用戶代碼(在單獨的appdomain中運行)。在你的情況下,只需讓NotifyIfNecessary運行到完成(即不要中止)。完成。
但是,也許你真的想要做的是,直到NotifyIfNecessary完成後,你的主線程纔會繼續。如果是這種情況,請調用線程「加入」。
您不需要調用Abort,因爲當NotifyIfNecessary結束時,線程將自動停止。
如果您希望NotifyIfNecessary完成,請不要中止該線程。如果您希望函數只在完成NotifyIfNecessary後繼續使用連接,或者不要在另一個線程中調用該函數。
我不認爲有需要致電Abort()
。一旦NotifyIsNeccessary
完成,線程將完成。您是否期待在Start()
結束時等待線程完成?
是否有中止線程的原因?無論如何,線程應該在方法完成執行後自動結束。 – 2010-12-09 15:30:40
是啊......似乎我錯過了這個事實,即線程會在方法執行後自行中止。謝謝。既然你們都說過一樣,upvoted所有和第一個答案將是最好的答案。再次感謝。 – xbonez 2010-12-09 15:32:58