2009-03-28 15 views
29

Estoy manteniendo un número de aplicaciones de consola en el trabajo y una cosa que he notado en varias de ellas es que llaman Environment.Exit (0).¿Cuándo se debe usar Environment.Exit para finalizar una aplicación de consola?

Un programa de ejemplo se vería así:

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     DoStuff(); 
     Environment.Exit(0); 
    } 
} 

No entiendo cuál es la intención del programador original era en hacer esto? En mi opinión, incluso sin la declaración Environment.Exit, el programa debería salir bien. Dicho esto, para uno de estos programas, la ventana de la consola ha permanecido incluso después de que se suponía que se cerró, así que no estoy seguro de qué está pasando allí ...

¿Falta algo aquí? ¿O hay una razón por la cual se debe llamar a Environment.Exit en esta instancia?

+3

muchas de estas cosas son supersticiones del programador, como cerrar y deshacerse de los objetos de conexión, aunque está envuelto en el hecho de que –

Respuesta

45

La única razón para llamar a Exit() como la última línea del método Principal es si es posible que haya otros subprocesos en primer plano en ejecución. Seguirían funcionando si la ejecución acaba de caer al final de Main. Incluso en este caso, por lo general sería una mejor idea agregar alguna terminación explícitamente explícita en los otros hilos o hacer que comiencen con hilos de fondo.

Si alguna vez desea devolver un código de salida diferente de Main, la forma más sencilla de lograr eso es declarar que devuelve int.

En resumen, no creo que necesite Environment.Exit() aquí, y vale la pena preguntarle a sus colegas exactamente por qué lo están usando - es probable que no puedan darle una buena razón, y es un poco más de pelusa puedes cortar.

+0

Gracias jon! No creas que tendré mucha suerte preguntándole al desarrollador original sobre ella, ya que ella se marchará. Al menos ahora sé que puedo eliminarlo sin preocuparme por romper algo. – mezoid

+0

La pregunta vinculada http://stackoverflow.com/questions/5253158/c-using-environment-exitcode-versus-returning-int-from-main también agregó información útil. –

13

Básicamente, la declaración Environment.Exit(0) indica al sistema operativo que se trata de una salida "limpia". Hay otros números, así cada uno con un significado diferente como Environment.Exit(1)

Sin embargo una cosa a tener en cuenta es que el "principal" ha sido declarado como devolver nada "vacío", por lo que el código de salida realmente no tendrá un significado a ella .

En caso de que quería saber más acerca de los diferentes códigos de salida echar un vistazo aquí

system Error Codes

+1

'Main' declarado como no devolver nada no tiene nada que ver con el significado del código de salida. – Ryan

3

Ésta es [Compatibilidad] para los programas de línea de comandos para indicar el éxito o el fracaso de una cáscara subyacente, y se hereda de mayor estilo C lazos principal, donde el prototipo de la función principal era

int main(void); 

int main(int argc, char *argv[]); 

el valor de retorno de 0 tradicionalmente significaba el éxito, mientras que los no-cero significaba el fracaso o algo más, dependiendo de w que el programador decidió.

Referencia:

wiki para obtener más información sobre la función main.

MSDN documenttion en Environment.Exit()

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

+0

En mi caso, mi aplicación de consola es una aplicación independiente y no necesita decirle nada al sistema operativo. ¿Entonces supongo que eso significa que la llamada es redundante en mi situación ...? – mezoid

+0

Se trata más de decirle al programa de shell si su programa tuvo éxito o falló, lo que puede ser importante en el futuro, así que vaya con la convención. p.ej. archivos por lotes, integración de nAnt, instaladores, etc. –

+0

Vale la pena señalar que una aplicación de consola .NET también puede tener su método principal return 'int' así como' void'. Lo hago todo el tiempo. – tomfanning

0

Esto realmente se usa cuando otras aplicaciones esperan el resultado de su aplicación de consola. Por ejemplo, SSRS (herramienta) puede iniciar una aplicación de consola y esperar para obtener un éxito de respuesta de falla. Environment.Exit (0) devuelve un mensaje de ejecución exitoso.

0

En SSIS cuando tiene una tarea de proceso de ejecución y desea saber si el proceso falla, este método es útil.

Cuestiones relacionadas