1

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

4

4 回答 4

4

我会在 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 中调试多线程应用程序

于 2013-10-23T06:35:10.327 回答
0

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

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

于 2013-10-23T05:30:52.587 回答
0

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

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

1. 在 App.StartUp() 中

设置关机模式

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

    Application.Current.Shutdown();

干杯。

于 2013-10-25T01:36:48.137 回答
0

您可以将所有创建的线程保存在List等容器中,并在退出时检查IsAliveThreadState属性。

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

(顺便说一下,有关您的应用程序类型和退出原因的更多信息会很有用。)

于 2013-10-23T06:18:13.967 回答