C# 我的应用程序无法退出的原因?

C# 我的应用程序无法退出的原因?,c#,.net,C#,.net,我们有一个用.net、c#、winforms编写的应用程序。我们注意到,有时在关闭应用程序时,流程仍然存在 我不确定如何重现这种行为,因此我正在寻找一些线索,以了解应用程序为何无法退出 应用程序使用了一些后台线程。线程池。不知道这是否是原因。其他任何东西都可能产生这种效果?很可能是一个线程一直在运行。如果您在任务管理器中查看该进程,您可以通过从“视图”菜单添加“线程”列来查看线程何时启动,以及线程退出时仍有多少线程在运行 首先,我要确保开始和结束的线程数相同。如果在应用程序关闭后,属性设置为fa

我们有一个用.net、c#、winforms编写的应用程序。我们注意到,有时在关闭应用程序时,流程仍然存在

我不确定如何重现这种行为,因此我正在寻找一些线索,以了解应用程序为何无法退出


应用程序使用了一些后台线程。线程池。不知道这是否是原因。其他任何东西都可能产生这种效果?

很可能是一个线程一直在运行。如果您在任务管理器中查看该进程,您可以通过从“视图”菜单添加“线程”列来查看线程何时启动,以及线程退出时仍有多少线程在运行


首先,我要确保开始和结束的线程数相同。

如果在应用程序关闭后,属性设置为false的线程仍处于活动状态,则它们将保持不变

该应用程序使用了一点 背景线程。线程池。 不知道这是否是原因。 还有什么能起到这种作用吗


虽然我不能确定它是否真的是原因,但它很有可能是原因。测试此假设的一种方法是确保所有显式创建的线程都被指定为后台线程。这可以通过设置
Thread.IsBackground=true
来完成,这将允许应用程序在主线程结束时终止。如果至少有一个线程的
IsBackground=false
,则CLR将保持主机进程运行。

获取并尽可能查看哪个线程处于挂起或运行状态

如果您能够在调试中运行并关闭窗体,VS不应返回到正常的代码编辑模式(它仍将有来自调试的暂停和停止按钮处于活动状态)。然后,您可以按“暂停”并查看“线程”窗口,查看仍处于活动状态的线程的调用堆栈的位置。

“因为某些东西仍在以某种方式执行”几乎是任何人都能给出的最具建设性的回答。你需要做一些调查来缩小你的可能性范围。我想当你看到它发生的时候,你不可能在不退出的进程上附加一个调试器?您可以做一个简单的线程开始和结束日志,并将线程名称/用途写入日志。