杀死一个线程

时间:2010-12-09 15:27:19

标签: c# multithreading

我正在处理的项目中有以下代码片段:

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

      }

我想要的是线程't'应该执行NotifyIfNecessary方法并且只在方法完成执行后才中止。在我当前的代码中,t.Abort()被过早调用。

5 个答案:

答案 0 :(得分:6)

这是因为您正在创建一个新线程并启动它,然后通过调用Thread.Abort()方法立即从您刚刚创建它的线程中删除它。你不需要这样做; NotifyIfNecessary完成执行后,您的线程将完成。只需删除行t.Abort();,您的代码就可以正常运行。

答案 1 :(得分:4)

您不应该首先调用abort,因为abort仅适用于失败的用户代码(在单独的appdomain中运行)。在您的情况下,只需允许NotifyIfNecessary运行完成(即不要调用abort)。完成。

但也许你真正想做的是,在NotifyIfNecessary完成之前,你的主线程不会继续。如果是这种情况,则调用Thread“Join”。

答案 2 :(得分:3)

您不需要调用Abort,因为当NotifyIfNecessary结束时,该线程将自动停止。

答案 3 :(得分:3)

如果您希望NotifyIfNecessary完成,请不要中止该线程。如果您希望该函数仅在完成NotifyIfNecessary之后继续使用join,或者不在另一个线程中调用该函数。

答案 4 :(得分:3)

我认为不需要拨打Abort()。一旦NotifyIsNeccessary完成,线程就会完成。您是否希望在Start()结束时等待线程完成?