2013-06-04 26 views
4

我知道Exitthread只能在线程内部调用,而Abort可以在任何时间任何地方使用,只要你可以访问Thread对象。但是当你需要强制关闭线程时,这两种方法(操作方式)还有其他显着的区别吗?Thread.Abort()vs Application.Exitthread()

回答

6

绝对是。

Thread.Abort()会导致可怕的,难以发现的错误,并且ExitThread()不会。

调用Thread.Abort()会导致线程内部抛出异常,并可能导致各种悲伤。

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

还要注意的是代码ExitThread()通话仍然会被执行之后,虽然UI调用,例如MessageBox.Show()不会做任何事情:如果你想在一个可控的方式退出线程

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"); 
} 

,你需要通过编写代码来积极支持它。

这里有一个关于它的良好的Microsoft文章:http://msdn.microsoft.com/en-us/library/dd997364.aspx

+0

所以,如果你拥有的奢侈品在两者之间进行选择,总是选择了ExitThread? – Jordy

+0

是的,但仅适用于正在运行消息泵的线程(例如Windows窗体应用程序中的主线程)。对于后台任务,您应该使用微软文章I链接中讨论的协作取消。取得正确的线程取消通常比您想象的要复杂得多。 –

相关问题