退出C#winforms应用程序

我有一个从Excel导入数据的应用程序。 但是,当我运行winforms应用程序并且我使用System.Windows.Forms.Application.Exit();侵入应用程序时System.Windows.Forms.Application.Exit(); 我仍然可以在任务管理器中看到“MyAppName”.vshost32.exe。

当我以调试模式退出应用程序时,表单关闭,但VS IDE未“停止”。

如何确保应用程序正确结束。

该进程不会终止,因为它仍然有前台线程在运行 。

如果在应用程序中创建线程,则需要将它们标记为后台线程,或者确保它们在您希望应用程序退出时终止。

您对Application.Exit()调用工作正常。 MyAppName.vshost32.exe可执行文件是用于调试目的的主机。 无论是否存在活动的调试会话,它都会在Visual Studio中打开项目时运行。

更新:好的,我误解了。 以上是正确的,但您可能在后台挂起线程时遇到问题。 您需要终止线程以使其正常关闭。 Asher的答案涵盖了这一点。 如果你只是想做一个超级hacky快速和脏杀,你可以使用以下(虽然我不负责副作用,因为它是非常hacky):

System.Diagnostics.Process.GetCurrentProcess().Kill();

你有没有尝试过更残酷的Environment.Exit()函数?

Application.Exit()只发送一条消息说要关机; 如果消息永远不会被处理(无论出于何种原因),应用程序将无限期地保持运行。

Application.Exit()的MSDN文档 :

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

我有一个类似的问题,由第三方工具导致我不允许我将线程设置为背景。 多项式有正确的想法,但语法是这样的:

 System.Diagnostics.Process.GetCurrentProcess().Kill();