Qual è il comando per uscire da un'applicazione Console in C #?


Risposte:


333

Puoi usare Environment.Exit(0);eApplication.Exit

Environment.Exit(0) è più pulito .


8
Solo curioso, cosa lo rende più pulito?
Concedi H.

Questo ha funzionato perfettamente per me quando ho aggiunto un timer a un'app console tramite stackoverflow.com/a/7865126/1530166 . Application.Exit non lo ha fatto, anche quando si utilizza stackoverflow.com/a/37029044/1530166 .
Jason Anderson,

5
@GrantH. è più pulito perché fornisce al sistema operativo sottostante un codice di errore più utile per cui sta uscendo.
Fayssal El Mofatiche

Tuttavia, Environment.Exitrichiede di disporre delle autorizzazioni SecurityPermissionFlag.UnmanagedCode, che per alcuni potrebbe essere problematica.
wp78de,

93

Diverse opzioni, in ordine di modo più appropriato:

  1. Restituisce un int dal metodo Program.Main
  2. Generare un'eccezione e non gestirla da nessuna parte (utilizzare per situazioni di errore impreviste)
  3. Per forzare la terminazione altrove, System.Environment.Exit( non portatile! Vedi sotto )

Modificato il 9/2013 per migliorare la leggibilità

Ritorno con un codice di uscita specifico: Come sottolinea Servy nei commenti, puoi dichiarare Main con un inttipo di ritorno e restituire un codice di errore in quel modo. Quindi non c'è davvero bisogno di usare Environment.Exit a meno che non sia necessario terminare con un codice di uscita e non è possibile farlo nel metodo Main. Molto probabilmente puoi evitarlo lanciando un'eccezione e restituendo un codice di errore in Main se un'eccezione non gestita si propaga lì. Se l'applicazione è multi-thread, probabilmente avrai bisogno di ancora più boilerplate per terminare correttamente con un codice di uscita, quindi potresti stare meglio semplicemente chiamando Environment.Exit.

Un altro punto contro l'uso Evironment.Exit- anche quando si scrivono applicazioni multi-thread - è la riusabilità . Se si desidera riutilizzare il codice in un ambiente che rende Environment.Exitirrilevante (come una libreria che può essere utilizzata in un server Web), il codice non sarà portatile. La soluzione migliore è ancora, a mio avviso, utilizzare sempre le eccezioni e / o i valori di ritorno che indicano che il metodo ha raggiunto un certo stato di errore / fine. In questo modo, puoi sempre utilizzare lo stesso codice in qualsiasi ambiente .NET e in qualsiasi tipo di applicazione. Se stai scrivendo un'app specifica che deve restituire un codice di uscita o terminare in un modo simile a quello che Environment.Exitfa, puoi quindi andare avanti e avvolgere il thread al livello più alto e gestire gli errori / le eccezioni secondo necessità.


10
L'ultima opzione è di cattivo gusto. Nessun programmatore desidera uscire da un programma generando un'eccezione.
Nikhil Agrawal,

5
Come ho scritto "per ordine del più appropriato". Inoltre, in determinate situazioni il lancio di un'eccezione È il modo corretto (ad esempio quando si verifica un errore imprevisto, fatale che non dovrebbe accadere dal quale l'applicazione non si ripristinerà mai). Ho aggiornato la risposta per chiarire.
sinelaw,

Se sei in Main, puoi semplicemente restituire 0, 1, ecc. E contrassegnare la firma del metodo come restituzione di un int per restituire un codice di errore, non è NECESSARIO utilizzare Environment.Exit per specificare un codice di errore.
Servito il

2
Dipende da quanto sei profondo nello stack di chiamate e se sei nel thread principale. Può essere più semplice chiamare Environment.Exit piuttosto che progettare l'intero programma per tornare completamente alla funzione principale senza usare un'eccezione per svolgere lo stack di chiamate (che non funzionerebbe da un thread in background; o ThreadPool inghiottirebbe l'eccezione o la eliminerebbe non gestita, in entrambi i casi qualsiasi logica di cattura nel metodo principale o nel thread non la vedrebbe mai.
KeithS

Ho cambiato l'ordine delle opzioni. Generare un'eccezione ha il vantaggio di rendere il codice molto più semplice da riutilizzare come libreria in diversi ambienti eseguibili.
sinelaw,

26

Le applicazioni della console usciranno al termine dell'esecuzione della funzione principale. Un "ritorno" ci riuscirà.

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

Se stai restituendo un codice di errore, puoi farlo in questo modo, accessibile da funzioni esterne al thread iniziale:

    System.Environment.Exit(-1);

9

Puoi usare Environment.Exit(0)e Application.Exit.

Environment.Exit(): termina questo processo e fornisce al sistema operativo sottostante il codice di uscita specificato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.