【问题标题】:How to immediately exit a Windows Forms .NET application?如何立即退出 Windows Forms .NET 应用程序?
【发布时间】:2010-02-22 20:50:59
【问题描述】:

在我们的应用程序中,我们有一个相当广泛的异常处理机制。在我们的错误处理逻辑的某个时刻,我们想要终止应用程序——就在此时,不再执行代码。

我们当前的代码使用 Environment.Exit() 来做到这一点。在调用 Environment.Exit() 之后,仍然执行一些代码。例如,GC 可能会执行某些对象的终结器(这在我们的例子中会导致问题)。我们不希望这种情况发生。有没有办法真正杀死我们自己的进程(可能是Win32 API 调用)?

当然,我们不希望最终用户看到程序崩溃时出现的 Windows 对话框...

【问题讨论】:

  • 既然你提到了GC,我假设这是.Net。您可能希望将 .Net 和/或 C# 添加到标签中。
  • @musigenesis:确实是.net。固定...

标签: .net winforms winapi


【解决方案1】:

使用Environment.FailFast 方法:

终止进程但不执行任何活动的 try-finally 块或终结器。

【讨论】:

    【解决方案2】:

    【讨论】:

    • @Greg - 但名字很奇怪。我认为他们会改为调用 ExitFast()...但是为什么要狡辩呢?
    • 文档说 FailFast 写入事件日志并创建应用程序的转储!这是很多副作用。我不认为我可以使用它。
    • @Sly:当然可以,这种方法只应该在“您的应用程序的状态已损坏无法修复时”使用。
    • @R. Bemrose:那么这不是我需要的。我只想安静地终止进程。
    • 如果执行终结器对您来说是个问题,我会说您的应用程序确实已损坏无法修复。
    【解决方案3】:

    这似乎适用于一个简单的应用程序,但我还没有尝试过任何复杂的应用程序:

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

    GetCurrentProcess:

    获取一个新的Process 组件和 将其与当前 活动进程。

    Kill:

    Kill 强制终止 进程,而仅CloseMainWindow 请求终止。

    【讨论】:

    • @R. Bemrose:我确认这也适用于我的应用程序。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2014-04-23
    • 1970-01-01
    • 2011-02-01
    • 2012-11-16
    • 2020-04-02
    相关资源
    最近更新 更多