【问题标题】:Best way to kill application instance杀死应用程序实例的最佳方法
【发布时间】:2010-10-25 23:08:53
【问题描述】:

杀死应用程序实例的最佳方法是什么? 我知道这三种方法:

  1. Application.Exit()

  2. Environment.Exit(0)

  3. Process.GetCurrentProcess().Kill()

谁能告诉我哪个更好,或者什么时候使用上述每种方法比较合适?

【问题讨论】:

    标签: c# winforms process


    【解决方案1】:

    来自 c# 常见问题的指南:

    System.Windows.Forms.Application.Exit() - 通知所有消息泵它们必须终止,然后在处理完消息后关闭所有应用程序窗口。此方法停止所有线程上所有正在运行的消息循环并关闭应用程序的所有窗口。此方法不会强制应用程序退出。 Exit 方法通常在消息循环中调用,并强制 Run 返回。要仅退出当前线程的消息循环,请调用 ExitThread。如果您正在运行 WinForms 应用程序,这是要使用的调用。作为一般准则,如果您调用了 System.Windows.Forms.Application.Run,​​请使用此调用。

    System.Environment.Exit(exitCode) - 终止此进程并为底层操作系统提供指定的退出代码。此调用要求您具有 SecurityPermissionFlag.UnmanagedCode 权限。如果不这样做,则会发生 SecurityException 错误。如果您正在运行控制台应用程序,这是要使用的调用。

    可能不建议终止进程。

    【讨论】:

    • 值得注意的是,如果您需要立即停止应用程序,Process.GetCurrentProcess().Kill() 是终止应用程序的正确方法。您不希望等待发出错误订单的交易应用程序优雅地退出。你想杀了那只小狗。
    【解决方案2】:

    如果这是一个 Windows 窗体应用程序,请使用 Application.Exit()。这将很好地关闭程序。

    【讨论】:

      【解决方案3】:

      只是一个快速的答案,当它起作用时,我总是会使用“退出”选项。这是一种更清洁的方式。

      “杀死”一个进程正是这个意思,因此程序不会做它可能想做的任何清理工作(如保存配置、保存其他文件等)。除非您知道该进程是什么并且它没有任何“清理”工作要做,即使那样,使用“退出”只是更清洁。

      您提到的两个“退出”选项之间似乎没有任何区别,我敢打赌,第一个只是隐式传递零值。

      【讨论】:

      • 我明白了,谢谢你的信息。这是一项关键的安全检查,因此我最好将其杀死,因为我不希望应用程序在未通过此检查时全部运行它。
      【解决方案4】:
       foreach (Process proc in Process.GetProcessesByName("WindowsFormsApplication1.vshost"))
              {
      
                  proc.Kill();
      
              }
      

      【讨论】:

      • 这没有回答问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多