我的应用程序中有一个奇怪的错误:我有一个后台线程和多个普通线程。当我关闭应用程序时,所有正常线程最终都会退出,而后台线程继续工作。
我检查了并行堆栈,后台线程仍然是唯一一个在工作的线程。
如何检查应用程序是否正在退出,以便从内部退出后台线程?
我的应用程序中有一个奇怪的错误:我有一个后台线程和多个普通线程。当我关闭应用程序时,所有正常线程最终都会退出,而后台线程继续工作。
我检查了并行堆栈,后台线程仍然是唯一一个在工作的线程。
如何检查应用程序是否正在退出,以便从内部退出后台线程?
如果您的应用程序有对后台线程的引用,请在应用程序终止时调用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();