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

时间:2013-10-23 05:27:25

标签: c# .net wpf

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

4 个答案:

答案 0 :(得分:4)

我将在Visual Studio中以调试模式运行程序。关闭GUI如果程序仍在运行,我将暂停我的调试模式,这将告诉我的程序在哪里。对于在调试模式下运行程序时的高级视图,请转到DEBUG> Windows> Thread Window。这将显示程序生成的所有线程。 may be this can help you

您将看到一个类似this http://mscerts.programming4.us/image/201307/Debugging%20with%20Visual%20Studio%202010_7.jpg

的窗口

有关如何使用Thread Window以及如何调试多线程应用程序的更多信息

1)How to Used Thread Window

2)How to Debug a MultiThreaded Application

3)Debug Multithreaded Applications in Visual Studio

答案 1 :(得分:0)

您应该可以点击暂停,它会将您带到正在运行的代码部分。

另一种选择是在函数末尾添加断点并查看哪一个没有被击中......

答案 2 :(得分:0)

您可以将所有创建的主题保存在容器中,例如列表,并在退出时检查 IsAlive ThreadState 属性。

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

(顺便提一下,有关您的申请类型和退出原因的更多信息将非常有用。)

答案 3 :(得分:0)

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

另外,我只想优雅地关闭应用程序。所以我对我的申请做了以下更改。

<强> 1。在App.StartUp()

设置关闭模式

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

    Application.Current.Shutdown();

  2. 干杯。