虽然主线程已完成,但该进程仍在运行。 可能是什么原因?我怎么能阻止它?
答案 0 :(得分:3)
如果您致电Application.exit()
,那可能是您的问题。来自MSDN:
此方法停止所有线程上的所有正在运行的消息循环,并关闭应用程序的所有窗口。 此方法不会强制应用程序退出。通常从消息循环中调用Exit方法,并强制运行返回。
如果你问我,这个功能被愚蠢地命名。可能应该被称为StopMessageLoops
或类似的东西。相反,请使用System.Environment.Exit()
答案 1 :(得分:1)
在所有non-background threads完成之前,应用程序才会退出。
你可以做的事情:
当你想要退出时设置某种信号,这样主线程以外的线程就可以退出。
对应用程序存在时应该终止的线程使用后台线程。
使用Environment.Exit是一种使应用程序关闭的相当残酷的方法,应该尽可能避免。可能需要正确关闭阻止应用程序退出的线程,例如,以防止数据损坏。
答案 2 :(得分:0)
使用调试器附加到进程并查看剩余的线程。当所有线程都退出时,该进程将退出。
您可以尝试循环遍历应用程序thread list和terminating所有线程。这可能会产生不良副作用。