【问题标题】:Killing a thread杀死一个线程
【发布时间】:2026-01-25 13:55:01
【问题描述】:

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

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

      }

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

【问题讨论】:

  • 您中止线程有什么原因吗?无论如何,线程应该在方法完成执行后自动结束。
  • 是的......似乎我错过了线程将在方法执行后自行中止的事实。谢谢。既然你们都说了同样的话,所有投票和第一个答案将是最佳答案。再次感谢。

标签: c# multithreading


【解决方案1】:

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

【讨论】:

  • +1 因为答案是完全正确的,但我要补充一点,如果在当前 Abort() 语句之外有代码,或者在调用此方法后执行,则需要线程具有完成后,您可以通过调用 t.Join() 而不是 t.Abort() 来等待线程完成。当您必须做一些昂贵的事情但不需要立即获得结果时,这很有用,因此您可以将其提供给工作线程,做其他不依赖于结果的事情,然后保证工作在您之前完成尝试使用任何结果。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我认为没有必要拨打Abort()。一旦NotifyIsNeccessary 完成,线程无论如何都会完成。您是否希望在Start() 结束时等待线程完成?

        【讨论】: