我只是想知道是否有任何方法来检测一个活动线程,该线程阻止应用程序在C#/ .Net中正常关闭。这意味着在用户关闭应用程序后,其实例仍然可以在任务管理器中看到。
答案 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 :(得分:0)
您应该可以点击暂停,它会将您带到正在运行的代码部分。
另一种选择是在函数末尾添加断点并查看哪一个没有被击中......
答案 2 :(得分:0)
您可以将所有创建的主题保存在容器中,例如列表,并在退出时检查 IsAlive 和 ThreadState 属性。
不关心保持线程的另一个选择是将 IsBackground 属性设置为 false 。此外,如果您使用 ThreadPool 或任务,您的线程始终是后台线程,建议您使用这些类,而不是手动创建线程。
(顺便提一下,有关您的申请类型和退出原因的更多信息将非常有用。)
答案 3 :(得分:0)
即使我有一个活动线程列表,但有些线程无法跟踪,因为它们的调用堆栈不可用。
另外,我只想优雅地关闭应用程序。所以我对我的申请做了以下更改。
<强> 1。在App.StartUp()
中设置关闭模式
protected override void OnStartup(StartupEventArgs e)
{
Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
}
当用户点击关闭按钮时,请调用以下函数
Application.Current.Shutdown();
干杯。