我们有一个用.net,c#,winforms编写的应用程序。我们注意到,有时在关闭应用程序时,该过程仍然存在。
我不确定如何重现这种行为,所以我正在寻找一些关于为什么应用程序不会退出的线索。
该应用程序使用一些后台线程。线程池。想知道这是否可能是原因。还有什么可能产生这种影响吗?
答案 0 :(得分:3)
如果您的应用程序关闭后,IsBackground属性设置为false的线程仍处于活动状态,则它们将保留
答案 1 :(得分:2)
该应用程序使用了一点 背景线程。线程池。 想知道这是否可能是原因。 还有什么可能产生这种影响吗?
它绝对是可能的原因虽然我无法确定它实际上是。测试此假设的一种方法是确保已明确创建的所有线程都被指定为后台线程。这可以通过设置Thread.IsBackground = true
来完成,这将允许应用程序在主线程结束时终止。如果至少有一个线程IsBackground = false
,那么CLR会使主机进程继续运行。
答案 2 :(得分:1)
它可能是一个运行的线程。如果您查看任务管理器中的进程,您可以通过从视图菜单添加“线程”列来查看线程何时启动,以及退出时剩余的线程数。
我首先要确保你以相同的线程数开始和结束。
答案 3 :(得分:1)
获取Process Explorer,可能还有Process Monitor,看看哪些线程处于暂停或正在运行状态。
答案 4 :(得分:0)
如果您能够在调试中运行并关闭表单,则VS不应返回到正常的代码编辑模式(它仍将具有来自调试活动的暂停和停止按钮)。然后,您可以按Pause并检查“线程”窗口,以查看仍处于活动状态的线程的调用堆栈的位置。