Quelle est la commande pour quitter une application console en C #?

256

Quelle est la commande en C # pour quitter une application console?

Sababoni
la source

Réponses:

333

Vous pouvez utiliser Environment.Exit(0);etApplication.Exit

Environment.Exit(0) est plus propre .

Nikhil Agrawal
la source
8
Juste curieux, qu'est-ce qui le rend plus propre?
Grant H.
Cela a parfaitement fonctionné pour moi lorsque j'ai ajouté une minuterie à une application console via stackoverflow.com/a/7865126/1530166 . Application.Exit ne l'a pas fait, même lors de l'utilisation de stackoverflow.com/a/37029044/1530166 .
Jason Anderson
5
@GrantH. il est plus propre car il donne au système d'exploitation sous-jacent un code d'erreur plus utile expliquant pourquoi il se ferme.
Fayssal El Mofatiche,
Cependant, Environment.Exitnécessite que vous ayez les autorisations SecurityPermissionFlag.UnmanagedCode - ce qui peut être gênant pour certains.
wp78de
93

Plusieurs options, par ordre de manière la plus appropriée:

  1. Renvoie un int de la méthode Program.Main
  2. Lancez une exception et ne la gérez nulle part (à utiliser pour les situations d'erreur inattendues)
  3. Pour forcer la résiliation ailleurs, System.Environment.Exit( non portable! Voir ci-dessous )

Modifié le 9/2013 pour améliorer la lisibilité

Retour avec un code de sortie spécifique: Comme le souligne Servy dans les commentaires, vous pouvez déclarer Main avec un inttype de retour et renvoyer un code d'erreur de cette façon. Il n'est donc vraiment pas nécessaire d'utiliser Environment.Exit sauf si vous devez terminer avec un code de sortie et que vous ne pouvez pas le faire dans la méthode Main. Vous pouvez très probablement éviter cela en lançant une exception et en renvoyant un code d'erreur dans Main si une exception non gérée s'y propage. Si l'application est multi-thread, vous aurez probablement besoin d'encore plus de passe-partout pour terminer correctement avec un code de sortie, il vaut donc mieux appeler simplement Environment.Exit.

Un autre point contre l'utilisation Evironment.Exit- même lors de l'écriture d'applications multi-threads - est la réutilisabilité . Si jamais vous souhaitez réutiliser votre code dans un environnement qui Environment.Exitn'est pas pertinent (comme une bibliothèque qui peut être utilisée dans un serveur Web), le code ne sera pas portable. À mon avis, la meilleure solution consiste toujours à toujours utiliser des exceptions et / ou des valeurs de retour qui indiquent que la méthode a atteint un état d'erreur / de fin. De cette façon, vous pouvez toujours utiliser le même code dans n'importe quel environnement .NET et dans tout type d'application. Si vous écrivez spécifiquement une application qui doit renvoyer un code de sortie ou se terminer d'une manière similaire à ce qui se Environment.Exitpasse, vous pouvez alors continuer et envelopper le thread au plus haut niveau et gérer les erreurs / exceptions selon les besoins.

sinelaw
la source
10
Cette dernière option est de mauvais goût. Aucun programmeur ne veut quitter un programme en lançant une exception.
Nikhil Agrawal
5
Comme je l'ai écrit "par ordre des plus appropriés". En outre, dans certaines situations, le déclenchement d'une exception EST la bonne façon (comme lorsqu'une erreur fatale inattendue qui ne devrait pas se produire et à partir de laquelle l'application ne se rétablira jamais). J'ai mis à jour la réponse pour clarifier.
sinelaw
Si vous êtes dans Main, vous pouvez simplement retourner 0, 1, etc. et marquer la signature de la méthode comme retournant un int pour renvoyer un code d'erreur, vous n'avez PAS BESOIN d'utiliser Environment.Exit pour spécifier un code d'erreur.
Servy
2
Cela dépend de la profondeur de la pile d'appels et de votre appartenance au thread principal. Il peut être plus simple d'appeler Environment.Exit que d'architecturer l'ensemble de votre programme pour revenir à la fonction principale sans utiliser d'exception pour dérouler la pile d'appels (qui ne fonctionnerait pas à partir d'un thread d'arrière-plan; soit le ThreadPool avalerait l'exception ou la jetterait sans gestion, de toute façon toute logique de capture dans la méthode principale ou le thread ne la verrait jamais.
KeithS
J'ai changé l'ordre des options. Le fait de lever une exception a l'avantage de rendre votre code beaucoup plus facile à réutiliser en tant que bibliothèque dans différents environnements exécutables.
sinelaw
26

Les applications de console se fermeront une fois la fonction principale terminée. Un «retour» y parviendra.

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

Si vous retournez un code d'erreur, vous pouvez le faire de cette façon, qui est accessible à partir de fonctions en dehors du thread initial:

    System.Environment.Exit(-1);
Développeur
la source
9

Vous pouvez utiliser Environment.Exit(0)et Application.Exit.

Environment.Exit(): termine ce processus et donne au système d'exploitation sous-jacent le code de sortie spécifié.

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
la source