C# 什么';s Environment.Exit()和Application.Shutdown()之间的区别是什么?
有时我调用时应用程序无法退出,UI已关闭,但进程仍在运行。如何关闭应用程序并关闭所有线程?()是否可以关闭所有线程?或者我们应该调用Win32 API TerminateThread来执行此操作?是关闭应用程序的一种更残酷的方式,是的。但总的来说,如果你需要关闭你的应用程序来关闭它,那么我认为你在错误地看待这个问题。 您应该更深入地了解其他线程没有正常关闭的原因 您可以查看主窗体上的,并关闭挂起应用程序的任何资源,以防止其关闭 这就是我如何找到挂起应用程序的资源C# 什么';s Environment.Exit()和Application.Shutdown()之间的区别是什么?,c#,.net,C#,.net,有时我调用时应用程序无法退出,UI已关闭,但进程仍在运行。如何关闭应用程序并关闭所有线程?()是否可以关闭所有线程?或者我们应该调用Win32 API TerminateThread来执行此操作?是关闭应用程序的一种更残酷的方式,是的。但总的来说,如果你需要关闭你的应用程序来关闭它,那么我认为你在错误地看待这个问题。 您应该更深入地了解其他线程没有正常关闭的原因 您可以查看主窗体上的,并关闭挂起应用程序的任何资源,以防止其关闭 这就是我如何找到挂起应用程序的资源 在调试模式下,启用的显示。(这将
正如Shay所说,永远不要调用TerminateThread,TerminateThread只杀死一个线程,而不让它自己清理。这可能会导致进程中其他线程的死锁和损坏 另一个had上的TerminateProcess将杀死整个进程并让操作系统进行清理,这是关闭进程的最快方法-您只需确保没有任何操作系统无法清理的资源(在调用TerminateProcess之前关闭windows也有帮助) 我想,但我还没有检查,那个环境。退出调用TerminateProcess
应用程序。关机非常不同,它不会立即终止进程-它会发送所有关闭和关机通知,并等待所有应用程序的窗口和线程自行关闭。哦,太棒了。我不知道你能帮我解决这个问题。非常有用,令人惊讶的是它没有被更广泛地了解。哲学问题(或者可能是一个愚蠢的问题):如果我们永远不应该调用它,为什么它会存在?@alzaimar:函数存在是因为有非常非常有限的情况下,人们可能被迫调用它。有关限制性案例的详细信息,请参见。我补充说,如果代码写得更好,甚至这些情况也可以避免。所以,这仍然存在的原因可能是:历史和兼容性。感谢您的响应,称为“Application.Shutdown”,但进程仍在运行并不总是发生的,我尝试了您的方法来找出哪个线程正在运行,但此错误没有重新产生。。。