2009-03-28 3 views
29

Sto mantenendo un numero di applicazioni console al lavoro e una cosa che ho notato in un numero è che chiamano Environment.Exit (0).Quando si dovrebbe usare Environment.Exit per terminare un'applicazione della console?

Un esempio di programma sarebbe simile a questa:

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

io non capisco quello che l'intento del programmatore originale era nel fare questo? Nella mia mente anche senza la dichiarazione Environment.Exit il programma dovrebbe uscire bene. Detto questo, per uno di questi programmi, la finestra della console è rimasta anche dopo la chiusura, quindi non sono sicuro di cosa stia succedendo ...

Mi manca qualcosa qui? O c'è un motivo per cui Environment.Exit dovrebbe essere chiamato in questo caso?

+3

un sacco di questa roba è la superstizione del programmatore, come la chiusura e lo smaltimento di oggetti di connessione, anche se è racchiuso in un –

risposta

45

L'unico motivo per chiamare Exit() come ultima riga del metodo Main è se potrebbero essere in esecuzione altri thread in primo piano. Rimarrebbero in esecuzione se l'esecuzione fosse caduta alla fine di Main. Anche in questo caso, sarebbe di solito un'idea migliore inserire una terminazione esplicita e esplicita negli altri thread, oppure renderli thread in background per iniziare.

Se si desidera restituire un codice di uscita diverso da Main, il modo più semplice per ottenere quello è dichiararlo per restituire int.

In breve, non penso che sia necessario il numero Environment.Exit() qui, e vale la pena chiedere ai tuoi colleghi esattamente perché lo stanno usando - è probabile che non siano in grado di darti una buona ragione, ed è un altro po ' di pelucchi che puoi tagliare.

+0

Grazie Jon! Non credo che avrò molta fortuna a chiedere allo sviluppatore originale perché è in congedo per maternità. Almeno ora so che posso rimuoverlo senza preoccuparmi di rompere qualcosa. – mezoid

+0

La domanda collegata http://stackoverflow.com/questions/5253158/c-using-environment-exitcode-versus-returning-int-from-main ha anche aggiunto informazioni utili. –

13

Fondamentalmente la dichiarazione Environment.Exit(0) indica al sistema operativo che si tratta di un'uscita "pulita". Ci sono anche altri numeri, ognuno con un significato diverso come Environment.Exit(1)

Tuttavia, una cosa da notare è che il "Main" è stato dichiarato che non restituisce nulla "void", quindi il codice di uscita non avrà davvero un significato per esso .

Solo nel caso si voleva sapere di più sui diversi codici di uscita di dare un'occhiata qui

system Error Codes

+1

'Principale' viene dichiarato come non restituire nulla non ha nulla a che fare con il significato del codice di uscita. – Ryan

3

Questo è [compatibilità] per i programmi a linea di comando per indicare il successo o il fallimento di un guscio di fondo, ed è ereditato dal vecchio C-style principali cicli in cui il prototipo della funzione principale era

int main(void); 

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

il valore di ritorno di 0 successo significava tradizionalmente, mentre diverso da zero significava guasto o qualcosa d'altro, a seconda w ha deciso il programmatore.

Riferimento:

wiki per ulteriori informazioni sulla funzione main.

MSDN documenttion su Environment.Exit()

Environment.Exit(): Termina questo processo e dà il sistema operativo sottostante il codice di uscita specificato .

+0

Nel mio caso, la mia applicazione console è un'applicazione indipendente e non ha bisogno di dire al sistema operativo nulla. Quindi suppongo che ciò significhi che la chiamata è ridondante nella mia situazione ....? – mezoid

+0

Si tratta di dire al programma shell se il programma ha avuto successo o meno, il che potrebbe essere importante in futuro, quindi segui la convenzione. per esempio. file batch, integrazione nAnt, programmi di installazione, ecc. –

+0

Vale la pena notare che un'app console .NET può anche avere il suo metodo principale return 'int' e' void'. Lo faccio tutto il tempo. – tomfanning

0

Questo è davvero usato quando altre applicazioni sono in attesa del risultato della tua app per console. Ad esempio, SSRS (tool) può avviare un'app console e attende di ottenere il successo della risposta all'errore. Environment.Exit (0) restituisce un messaggio di esecuzione riuscito.

0

In SSIS quando si esegue un'attività di esecuzione e si desidera sapere se il processo è in errore, questo metodo è utile.