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