有时候当我调用Application.Shutdown关闭应用程序时,虽然UI已经关闭了,但进程仍在运行。如何关闭应用程序并关闭所有线程? Environment.Exit()能否关闭所有线程?或者我们应该调用Win32 API的TerminateThread来实现?
有时候当我调用Application.Shutdown关闭应用程序时,虽然UI已经关闭了,但进程仍在运行。如何关闭应用程序并关闭所有线程? Environment.Exit()能否关闭所有线程?或者我们应该调用Win32 API的TerminateThread来实现?
Environment.Exit() 是一种更加强制性的关闭应用程序的方式。但是通常来说,如果您需要杀死应用程序以使其关闭,那么我认为您正在错误地看待问题。
您应该查找其他线程为何无法正常关闭而优雅地关闭它们。
您可以查看主窗体上的FormClosing事件并关闭阻止应用程序关闭的任何资源。
以下是我发现资源导致应用程序无法关闭的方法:
请注意,调试模式下的线程列表将显示一些您无法控制的已运行线程。这些线程很少有名称,当您单击它们时,您会收到一条消息,指出未找到符号。这些线程可以安全地忽略。
确保应用程序优雅地关闭的原因之一是某些资源(比如FileStream)尚未完成工作,因此使用某些API来强制退出可能会导致各种“随机”的问题,例如设置/数据文件未被写入等。