gpt4 book ai didi

c# - Environment.Exit() 和 Application.Shutdown() 有什么区别?

转载 作者:IT王子 更新时间:2023-10-29 04:38:21 26 4
gpt4 key购买 nike

有时当我调用时应用程序无法退出Application.Shutdown ,UI关闭了,但是进程还在运行。如何通过关闭所有线程来关闭应用程序? Environment.Exit () 可以关闭所有线程吗?或者我们应该调用 Win32 API TerminateThread 来完成它?

最佳答案

Environment.Exit()是一种更残酷的关闭应用程序的方式,是的。但总的来说,如果您需要终止您的应用程序以使其关闭,那么我认为您正在以错误的方式看待问题。您应该调查为什么其他线程没有正常关闭。

您可以查看 FormClosing event在主窗体上并关闭所有挂起应用程序的资源,以防止它关闭。

这就是我找到挂起应用程序的资源的方式。

  1. 在 Debug模式下,启用 threads 的显示. (这将允许您查看您的应用程序正在运行的所有线程。)
  2. 以无法正确关闭的方式关闭应用程序。
  3. 在 Visual Studio 中按下暂停键。
  4. 查看线程列表,然后单击它们以查看它们挂起的代码在哪里。现在您可以看到哪些资源阻止您的应用程序关闭,转到您的 FormClosing 事件并在那里关闭/处置它们。
  5. 重复直到应用正确关闭:)

请注意, Debug模式下的线程列表将显示一些正在运行但不受您控制的线程。这些线程很少有名称,当您单击它们时,您会收到一条消息说您没有符号。可以安全地忽略这些。

确保您的应用程序正常关闭的原因之一是某些资源(比如说 FileStream )没有完成工作,因此使用某些 API 强制它退出可能会产生各种“随机”问题进来,比如设置/数据文件没有被写入等等。

关于c# - Environment.Exit() 和 Application.Shutdown() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/905544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com