在C#中退出控制台应用程序的命令是什么?


Answers:


333

您可以使用Environment.Exit(0);Application.Exit

Environment.Exit(0) 更干净


8
只是好奇,是什么让它更清洁?
Grant H.

当我通过stackoverflow.com/a/7865126/1530166将一个计时器添加到控制台应用程序时,这对我来说非常理想。即使使用stackoverflow.com/a/37029044/1530166,Application.Exit也不这样做。
杰森·安德森

5
@GrantH。它更干净,因为它为底层操作系统提供了一个更有用的错误代码,说明为什么退出该代码。
Fayssal El Mofatiche

但是,Environment.Exit要求您具有SecurityPermissionFlag.UnmanagedCode权限-这可能对某些人造成麻烦。
wp78de

93

几种选择,按最合适的方式排序:

  1. 从Program.Main方法返回一个int
  2. 引发异常并且不在任何地方处理(用于意外的错误情况)
  3. 强制终止其他位置System.Environment.Exit((不可移植!请参见下文))

编辑9/2013以提高可读性

返回带有特定的退出代码:正如Servy在注释中指出的那样,您可以使用int返回类型声明Main,并以这种方式返回错误代码。因此,实际上没有必要使用Environment.Exit,除非您需要以退出代码终止并且不可能在Main方法中执行此操作。很可能您可以通过抛出异常并在Main中传播任何未处理的异常的情况下在Main中返回错误代码来避免这种情况。如果应用程序是多线程的,则可能需要更多样板才能正确地以退出代码终止,因此最好只调用Environment.Exit。

Evironment.Exit即使在编写多线程应用程序时,反对使用的另一点是可重用性。如果您想在Environment.Exit不相关的环境中重用您的代码(例如Web服务器中可能使用的库),则代码将不可移植。我认为,最好的解决方案仍然是始终使用表示方法已达到某种错误/完成状态的异常和/或返回值。这样,您可以始终在任何.NET环境和任何类型的应用程序中使用相同的代码。如果您专门编写一个需要返回退出代码或以类似于退出的方式终止的应用程序,Environment.Exit则可以继续将线程包装在最高级别,并根据需要处理错误/异常。


10
最后的选择味道不好。没有程序员希望通过抛出异常来退出程序。
Nikhil Agrawal

5
正如我写的“按最适当的顺序”。此外,在某些情况下,以正确的方式抛出异常是正确的方式(例如,当发生不应发生的意外致命致命错误时,应用程序将永远无法恢复该错误)。我已经更新了答案以进行澄清。
sinelaw

如果您位于Main中,则只需返回0、1等,并将方法签名标记为返回int以返回错误代码,则无需使用Environment.Exit来指定错误代码。
Servy

2
取决于您在调用堆栈中的深度以及您是否在主线程中。调用Environment.Exit可能比构造整个程序将其返回到主函数要更简单,而无需使用异常来展开调用堆栈(这在后台线程中是无效的;要么ThreadPool会吞下它),异常或将其抛出未处理状态,无论是主方法还是线程中的任何捕获逻辑都永远不会看到它
KeithS 2012年

我更改了选项的顺序。引发异常的优点是使您的代码更容易在不同的可执行环境中作为库重用。
sinelaw 2013年

26

当主要功能完成运行时,控制台应用程序将退出。一个“返回”将实现这一目标。

    static void Main(string[] args)
    {
        while (true)
        {
            Console.WriteLine("I'm running!");
            return; //This will exit the console application's running thread
        }
    }

如果返回错误代码,则可以通过以下方式进行操作,可以从初始线程之外的函数访问该代码:

    System.Environment.Exit(-1);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.