我有一个从Excel导入数据的应用程序。然而,当我运行winforms应用并使用System.Windows.Forms.Application.Exit();
中断应用程序时,在任务管理器中仍然可以看到"MyAppName".vshost32.exe正在运行。
在调试模式下退出应用程序后,窗体关闭了,但VS IDE没有“停止”。
如何确保应用程序正确结束。
我有一个从Excel导入数据的应用程序。然而,当我运行winforms应用并使用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()
只是发送一个关闭消息;如果该消息没有被处理(无论什么原因),应用程序将无限期地保持运行状态。
Exit方法停止所有线程上运行的消息循环,并关闭应用程序的所有窗口。该方法不一定强制应用程序退出。Exit方法通常从消息循环中调用,并强制Run返回。
Application.Exit()
只是向所有消息泵的队列发布一条消息;你的窗体泵似乎处理了该消息并退出,但还有其他东西(也许是另一个线程?)没有听从请求。 - Cameron我曾经遇到过类似的问题,是由于一个第三方工具不允许我将线程设置为 Background。 Polynomial 的想法是正确的,但是语法应该是这样的:
System.Diagnostics.Process.GetCurrentProcess().Kill();