如何在 .NET 中检测哪个线程阻止应用程序关闭

本文关键字:线程 应用程序 NET 检测 | 更新日期: 2023-09-27 18:36:26

我只是想知道是否有任何方法可以检测到阻止应用程序在 C#/.Net 中正确关闭的活动线程。这意味着在用户关闭应用程序后,其实例在任务管理器中仍然可见。

如何在 .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)中,并在退出期间检查 IsAliveThreadState 属性。

另一个不关心持有线程的选项是将 IsBackground 属性设置为 false。此外,如果您使用 ThreadPoolTask,您的线程始终是后台线程,建议使用这些类而不是手动创建 Thread

(顺便说一下,有关应用程序类型和退出原因的详细信息将很有用。

即使我有一个活动线程的列表,其中一些也无法跟踪,因为它们的调用堆栈不可用。

此外,我只想优雅地关闭应用程序。因此,我对我的应用程序进行了以下更改。

1. 在应用程序中启动()

设置关机模式

protected override void OnStartup(StartupEventArgs e)
        {
              Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
}
  1. 当用户单击关闭按钮时,调用以下函数

    Application.Current.Shutdown();

干杯。