¿Cuál es el comando para salir de una aplicación de consola en C #?

Respuestas:

333

Puedes usar Environment.Exit(0);yApplication.Exit

Environment.Exit(0) Está más limpio .

Nikhil Agrawal
fuente
8
Por curiosidad, ¿qué lo hace más limpio?
Grant H.
Esto funcionó perfectamente para mí cuando agregué un temporizador a una aplicación de consola a través de stackoverflow.com/a/7865126/1530166 . Application.Exit no lo hizo, incluso cuando se usa stackoverflow.com/a/37029044/1530166 .
Jason Anderson el
55
@GrantH. es más limpio porque le da al sistema operativo subyacente un código de error más útil por el que está saliendo.
Fayssal El Mofatiche
Sin embargo, Environment.Exitrequiere que tenga permisos SecurityPermissionFlag.UnmanagedCode, lo que puede ser problemático para algunos.
wp78de
93

Varias opciones, por orden de la forma más adecuada:

  1. Devuelve un int desde el método Program.Main
  2. Lanza una excepción y no la manejes en ningún lado (úsala para situaciones de error inesperadas)
  3. Para forzar la terminación en otro lugar System.Environment.Exitno portátil! Ver más abajo )

Editado el 9/2013 para mejorar la legibilidad

Regresar con un código de salida específico: como señala Servy en los comentarios, puede declarar Main con un inttipo de retorno y devolver un código de error de esa manera. Entonces, realmente no hay necesidad de usar Environment.Exit a menos que necesite terminar con un código de salida y no pueda hacerlo en el método Main. Lo más probable es que pueda evitarlo lanzando una excepción y devolviendo un código de error en Main si alguna excepción no controlada se propaga allí. Si la aplicación es multiproceso, probablemente necesitará aún más repetitivo para terminar correctamente con un código de salida, por lo que es mejor que solo llame a Environment.Exit.

Otro punto en contra del uso Evironment.Exit, incluso al escribir aplicaciones multiproceso, es la reutilización . Si alguna vez desea reutilizar su código en un entorno que sea Environment.Exitirrelevante (como una biblioteca que puede usarse en un servidor web), el código no será portátil. La mejor solución aún es, en mi opinión, usar siempre excepciones y / o valores de retorno que representen que el método alcanzó algún estado de error / finalización. De esa manera, siempre puede usar el mismo código en cualquier entorno .NET y en cualquier tipo de aplicación. Si está escribiendo específicamente una aplicación que necesita devolver un código de salida o terminar de manera similar a lo que Environment.Exithace, puede continuar y envolver el hilo en el nivel más alto y manejar los errores / excepciones según sea necesario.

sinelaw
fuente
10
Esa última opción es de mal gusto. Ningún programador quiere salir de un programa lanzando una excepción.
Nikhil Agrawal
55
Como escribí "por orden de lo más apropiado". Además, en ciertas situaciones, lanzar una excepción ES la forma correcta (por ejemplo, cuando ocurre un error fatal inesperado que no debería ocurrir y de la cual la aplicación nunca se recuperará). He actualizado la respuesta para aclarar.
sinelaw
Si está en Main, puede devolver 0, 1, etc. y marcar la firma del método como devuelve un int para devolver un código de error, NO NECESITA usar Environment.Exit para especificar un código de error.
Servy
2
Depende de qué tan profundo esté en la pila de llamadas y si está en el hilo principal. Puede ser más simple llamar a Environment.Exit que diseñar todo su programa para volver a la función principal sin usar una excepción para desenrollar la pila de llamadas (que no funcionaría desde un hilo de fondo; o ThreadPool se tragaría la excepción o podría tirar por no controlada, de cualquier manera cualquier lógica de captura en el método principal o hilo no lo vería.
Keiths
Cambié el orden de las opciones. Lanzar una excepción tiene la ventaja de hacer que su código sea mucho más fácil de reutilizar como biblioteca en diferentes entornos ejecutables.
sinelaw
26

Las aplicaciones de consola se cerrarán cuando la función principal haya terminado de ejecutarse. Un "retorno" logrará esto.

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

Si devuelve un código de error, puede hacerlo de esta manera, al que se puede acceder desde funciones fuera del hilo inicial:

    System.Environment.Exit(-1);
Desarrollador
fuente
9

Puedes usar Environment.Exit(0)y Application.Exit.

Environment.Exit(): finaliza este proceso y le da al sistema operativo subyacente el código de salida especificado.

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
fuente