2010-12-09 205 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()结束时等待线程完成?