Nik*_*wal 300

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

Environment.Exit(0) 更清洁.

  • 只是好奇,是什么让它更清洁? (8认同)
  • @GrantH.它更干净,因为它为底层操作系统提供了一个更有用的错误代码,为什么它会退出. (4认同)

sin*_*law 93

几种选择,按最合适的顺序排列:

  1. 从Program.Main方法返回一个int
  2. 抛出异常并且不在任何地方处理它(用于意外的错误情况)
  3. 在其他地方强行终止,System.Environment.Exit(不便携!见下文)

编辑于2013年9月以提高可读性

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

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

  • 最后一个选择是味道不好.没有程序员想通过抛出异常退出程序. (9认同)
  • 正如我写的"按最合适的顺序".此外,在某些情况下抛出异常是正确的方法(例如,当应用程序永远无法恢复时发生不应发生的意外,致命错误).我已经更新了答案以澄清. (5认同)
  • 取决于你的调用堆栈有多深,以及你是否在主线程中.调用Environment.Exit比构建整个程序更简单,而不是使用异常来解析调用堆栈(无法解析调用堆栈;无论是ThreadPool还是吞下)都可以将整个程序返回到main函数异常或将其抛出未处理,无论哪种方式,主方法或线程中的任何catch逻辑都永远不会看到它. (2认同)

小智 24

主函数运行完毕后,控制台应用程序将退出."回归"将实现这一目标.

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

如果您要返回错误代码,可以这样做,可以从初始线程之外的函数访问:

    System.Environment.Exit(-1);
Run Code Online (Sandbox Code Playgroud)


aaa*_*aaa 8

你可以使用Environment.Exit(0)Application.Exit.

Environment.Exit():终止此过程并为底层操作系统提供指定的退出代码.