C# - 虽然主线完成但可能会阻止应用程序退出?

时间:2011-08-24 18:13:27

标签: c#

虽然主线程已完成,但该进程仍在运行。 可能是什么原因?我怎么能阻止它?

3 个答案:

答案 0 :(得分:3)

如果您致电Application.exit(),那可能是您的问题。来自MSDN:

此方法停止所有线程上的所有正在运行的消息循环,并关闭应用程序的所有窗口。 此方法不会强制应用程序退出。通常从消息循环中调用Exit方法,并强制运行返回。

如果你问我,这个功能被愚蠢地命名。可能应该被称为StopMessageLoops或类似的东西。相反,请使用System.Environment.Exit()

阅读:Why would Application.Exit fail to work?

答案 1 :(得分:1)

在所有non-background threads完成之前,应用程序才会退出。

你可以做的事情:

  • 当你想要退出时设置某种信号,这样主线程以外的线程就可以退出。

  • 对应用程序存在时应该终止的线程使用后台线程。

使用Environment.Exit是一种使应用程序关闭的相当残酷的方法,应该尽可能避免。可能需要正确关闭阻止应用程序退出的线程,例如,以防止数据损坏。

答案 2 :(得分:0)

使用调试器附加到进程并查看剩余的线程。当所有线程都退出时,该进程将退出。

您可以尝试循环遍历应用程序thread listterminating所有线程。这可能会产生不良副作用。