【问题标题】:Closing Applications关闭应用程序
【发布时间】:2011-08-22 10:25:23
【问题描述】:

关闭 C# 应用程序时的最佳做法是什么?

我读过你可以使用:

Environment.Exit(0); or Application.Exit();

但是有什么区别呢?

此外,关于 Environment.Exit(0),我之前在使用 Java 时使用过退出代码,但从未完全理解它们的用途。在 C# 中退出应用程序时它们扮演什么角色?

【问题讨论】:

  • 取决于您的应用程序。如果你写一个恶魔,那么返回0;如果您使用 Windows 应用程序,则关闭主窗体。不要使用强制终止。
  • @jalal 可能是您的权利。但是,我不会说它是重复的。在您发表评论之前,我已经在下面的帖子中添加了该链接。请不要标记为重复,希望它值得。
  • @Windows 如果有重复版本,我们通常将问题标记为重复,我已经投票关闭它,这不是可撤销的操作,但是将问题标记为重复不会损害您的答案,用户仍然可以接受。
  • thx @jalal,但我不接受我的回答。我以前也有同样的事情(重复)。我对此感到非常糟糕,因为即使我在谷歌或相关 Qs 中也看不到这个问题。那么,我怎么知道它已经被问过了......无论如何,请不要再这样做了,我身边的一个小请求。

标签: c#


【解决方案1】:

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

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

希望最好用Application.Exit

另见这些链接:

【讨论】:

  • 可能值得明确指出,在您调用Application.Run 之前,您唯一的选择是Environment.Exit,因为Application.Exit 将无效。
  • 我有两个表单登录和主表单。当登录按钮单击登录表单时,我在单击登录并打开主窗体时使用 this.hide(),然后在关闭窗体时从那里使用隐藏,然后再次显示登录表单。如果我运行应用程序并单击登录按钮,然后多次关闭主窗体,当我单击登录表单上的退出 (System.Windows.Forms.Application.Exit() ) 按钮时,它将显示所有登录表单我躲了起来。但如果我使用 (System.Environment.Exit(0)) 它将关闭并完全退出应用程序。总而言之,我会说后者是最好的
【解决方案2】:

Application.Exit 用于 Windows 窗体应用程序 - 它通知所有消息泵它们应该终止,等待它们完成处理事件,然后终止应用程序。请注意,它不一定强制应用程序退出。

Environment.Exit 适用于所有 Windows 应用程序,但主要用于控制台应用程序。它立即使用给定的退出代码终止进程。

一般来说,您应该在 Windows 窗体应用程序中使用 Application.Exit,在控制台应用程序中使用 Environment.Exit,(尽管我更喜欢让 Main 方法/入口点运行完成,而不是在控制台应用程序中调用 Environment.Exit) .

有关更多详细信息,请参阅 MSDN 文档。

【讨论】:

  • 感谢您的回答。我需要从不同的类而不是 Program.cs 退出我的应用程序,它是一个控制台应用程序,这很好用。我相信我也可以使用关键字 return,这将使 Main 完成运行,但在这种情况下没有任何区别。
【解决方案3】:

在退出 C# 应用程序时它们扮演什么角色?

与所有其他应用程序相同。基本上,它们会返回给调用者。如果开始是 iicon 双击,则无关紧要。相关的是调用是一个批处理文件,它决定应用程序是否在返回码上工作。所以,除非你编写一个需要这个的程序,否则返回的 dcode 是无关紧要的。

但是有什么区别呢?

一个来自 System.Windows.Forms?.Application 的环境一。功能上应该没有太大区别。

【讨论】:

    【解决方案4】:

    对我来说最好的独奏是

     Thread.CurrentThread.Abort();
    

    并强制关闭应用程序。

    【讨论】:

    • 为什么这比Application.Exit()好?那就是应用运行多个后台线程?
    【解决方案5】:

    试试这个

    System.Windows.Application.Current.Shutdown();

    它也适用于 NotifyIcon。将此代码放在 App.xaml.cs '

    protected override void OnExit(ExitEventArgs e)
        {
            base.OnExit(e);
            App.nIcon.Visible = false;
        } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2023-03-19
      • 2011-08-24
      • 1970-01-01
      • 2017-09-18
      相关资源
      最近更新 更多