Thread.Abort() vs Application.Exitthread()

本文关键字:Exitthread Application vs Thread Abort | 更新日期: 2023-09-27 18:16:44

我知道Exitthread只能从线程内部调用,而Abort可以在任何时间任何地点使用,只要您可以访问线程对象。但是,当您需要强制关闭线程时,这两种方法(操作方面)之间是否存在其他显著差异?

Thread.Abort() vs Application.Exitthread()

绝对可以。

Thread.Abort()会导致可怕的、难以发现的bug,而ExitThread()不会。

调用Thread.Abort()会导致在线程内部抛出异常,这可能会导致各种各样的痛苦。

当然,ExitThread()只适用于运行消息循环的线程。

还需要注意的是,调用ExitThread()之后的代码仍然会被执行,尽管像MessageBox.Show()这样的UI调用不会做任何事情:

private void button1_Click(object sender, EventArgs e)
{
    Application.ExitThread();
    MessageBox.Show("This won't be shown because the UI is being shut down.");
    Debug.WriteLine("But this is still executed");
}

如果你想以一种受控的方式退出线程,你需要通过编写代码来积极地支持它。

这里有一篇很好的微软文章:http://msdn.microsoft.com/en-us/library/dd997364.aspx