如何在 .NET 中检测哪个线程阻止应用程序关闭
本文关键字:线程 应用程序 NET 检测 | 更新日期: 2023-09-27 18:36:26
我只是想知道是否有任何方法可以检测到阻止应用程序在 C#/.Net 中正确关闭的活动线程。这意味着在用户关闭应用程序后,其实例在任务管理器中仍然可见。
我会在Visual Studio中以调试模式运行该程序。 关闭 GUI 时,如果程序仍在运行,我将暂停调试模式,这将告诉我的程序在哪里。有关在调试模式下运行程序时的高级视图,请转到 DEBUG>Windows>Thread Window。这将显示程序生成的所有线程。也许这可以帮助你。
你会得到一个这样的窗口 http://mscerts.programming4.us/image/201307/Debugging%20with%20Visual%20Studio%202010_7.jpg
有关如何使用线程窗口以及如何调试多线程应用程序的详细信息
1) 如何使用线程窗口
2) 如何调试多线程应用程序
3) 在Visual Studio中调试多线程应用程序
您应该能够点击暂停,它会将您带到正在运行的代码部分。
另一种选择是在函数末尾添加断点,看看哪一个没有命中......
所有创建的线程保存在容器(如 List)中,并在退出期间检查 IsAlive 和 ThreadState 属性。
另一个不关心持有线程的选项是将 IsBackground 属性设置为 false。此外,如果您使用 ThreadPool 或 Task,您的线程始终是后台线程,建议使用这些类而不是手动创建 Thread。
(顺便说一下,有关应用程序类型和退出原因的详细信息将很有用。
即使我有一个活动线程的列表,其中一些也无法跟踪,因为它们的调用堆栈不可用。
此外,我只想优雅地关闭应用程序。因此,我对我的应用程序进行了以下更改。
1. 在应用程序中启动()
设置关机模式
protected override void OnStartup(StartupEventArgs e)
{
Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
}
当用户单击关闭按钮时,调用以下函数
Application.Current.Shutdown();
干杯。