4
我知道Exitthread只能在线程内部调用,而Abort可以在任何时间任何地方使用,只要你可以访问Thread对象。但是当你需要强制关闭线程时,这两种方法(操作方式)还有其他显着的区别吗?Thread.Abort()vs Application.Exitthread()
我知道Exitthread只能在线程内部调用,而Abort可以在任何时间任何地方使用,只要你可以访问Thread对象。但是当你需要强制关闭线程时,这两种方法(操作方式)还有其他显着的区别吗?Thread.Abort()vs Application.Exitthread()
绝对是。
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
所以,如果你拥有的奢侈品在两者之间进行选择,总是选择了ExitThread? – Jordy
是的,但仅适用于正在运行消息泵的线程(例如Windows窗体应用程序中的主线程)。对于后台任务,您应该使用微软文章I链接中讨论的协作取消。取得正确的线程取消通常比您想象的要复杂得多。 –