后台线程在退出应用程序时没有关闭

时间:2012-04-26 11:46:16

标签: c# multithreading

我的应用程序中出现了一个奇怪的错误:我有一个后台线程和多个普通线程。当我关闭应用程序时,所有正常线程最终都退出,而后台线程继续工作。

我已经检查了并行堆栈,后台线程仍然是唯一正在运行的。

如何检查应用程序是否正在退出,以便我可以从内部退出后台线程?

1 个答案:

答案 0 :(得分:0)

如果您的应用程序引用了后台线程,请在终止应用程序时调用thread.Abort()方法。

根据使用的框架,还有其他选择。例如,在WPF中,后台线程可以处理Application.Exit事件:

new Thread(new ThreadStart(() =>
{
    var thread = Thread.CurrentThread;

    Dispatcher.Invoke((Action)delegate
    {
        Exit += (obj, args) => thread.Abort();
    });

    while (true) ; // background thread is always busy
})).Start();