【问题标题】:Thread.Abort() vs Application.Exitthread()Thread.Abort() 与 Application.Exitthread()
【发布时间】:2013-05-30 13:34:57
【问题描述】:

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

【问题讨论】:

    标签: c# thread-abort


    【解决方案1】:

    绝对是的。

    Thread.Abort() 会导致可怕的、难以发现的错误,而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");
    }
    

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

    这是一篇很好的 Microsoft 文章:http://msdn.microsoft.com/en-us/library/dd997364.aspx

    【讨论】:

    • 所以,如果你有幸在两者之间做出选择,总是选择 ExitThread?
    • 是的,但仅适用于运行消息泵的线程(例如,Windows 窗体应用程序中的主线程)。对于后台任务,您应该使用我链接的 Microsoft 文章中讨论的合作取消。正确取消线程通常比您最初想象的要复杂。
    猜你喜欢
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多