C#でコンソールアプリケーションを終了するコマンドは何ですか?


回答:


333

あなたが使用することができますEnvironment.Exit(0);し、Application.Exit

Environment.Exit(0) きれいです。


8
好奇心旺盛ですが、何がそれをよりきれいにしているのですか?
Grant H.

これは、stackoverflow.com / a / 7865126/1530166を使用してコンソールアプリにタイマーを追加したときに完全に機能しました。stackoverflow.com/a/37029044/1530166を使用している場合でも、Application.Exitはそれを行いませんでした。
ジェイソンアンダーソン

5
@GrantH。基盤となるオペレーティングシステムに、終了する理由としてより有用なエラーコードを提供するため、よりクリーンです。
Fayssal El Mofatiche 2017年

ただし、Environment.ExitSecurityPermissionFlag.UnmanagedCode権限が必要です-これは一部の人にとって面倒かもしれません。
wp78de 2018

93

最も適切な方法の順序によるいくつかのオプション:

  1. Program.Mainメソッドから整数を返す
  2. 例外をスローしてどこでも処理しない(予期しないエラー状況に使用)
  3. 他の場所で強制終了するにはSystem.Environment.Exit移植不可!以下を参照

読みやすさを改善するために2013年9月に編集

特定の終了コードで戻る: Servyがコメントで指摘しているように、int戻り値の型を使用してMainを宣言し、その方法でエラーコードを返すことができます。したがって、終了コードで終了する必要があり、Mainメソッドで終了できない場合を除き、 Environment.Exitを使用する必要はありません。ほとんどの場合、例外をスローし、未処理の例外がそこに伝播された場合にMainでエラーコードを返すことでそれを回避できます。アプリケーションがマルチスレッド化されている場合は、Exitコードで適切に終了するために、さらに多くのボイラープレートが必要になる可能性があるため、Environment.Exitを呼び出すだけの方がよいでしょう。

Evironment.Exitマルチスレッドアプリケーションを作成している場合でも、使用のもう1つのポイントは再利用性です。関連Environment.Exit性のない環境(Webサーバーで使用される可能性があるライブラリなど)でコードを再利用したい場合、コードは移植できません。私の意見では、最善の解決策は、メソッドが何らかのエラー/終了状態に達したことを表す例外や戻り値を常に使用することです。そうすれば、どの.NET環境でも、どのタイプのアプリケーションでも、常に同じコードを使用できます。終了コードを返す必要がある、または同様の方法で終了する必要のあるアプリを具体的に記述している場合Environment.Exitは、次に進んでスレッドを最高レベルでラップし、必要に応じてエラー/例外を処理できます。


10
その最後のオプションは味が悪い。例外をスローしてプログラムを終了したいプログラマはいない。
Nikhil Agrawal 2012

5
私が「最も適切な順序で」書いたように。また、特定の状況では、例外をスローすることが正しい方法です(予期しない致命的なエラーが発生してアプリケーションが回復しない場合など)。明確にするために答えを更新しました。
sinelaw 2012

Mainにいる場合は、0、1などを返し、メソッドシグネチャをintを返すようにマークしてエラーコードを返すことができます。Environment.Exitを使用してエラーコードを指定する必要はありません。
サービー2012

2
コールスタックの深さと、メインスレッドにいるかどうかによって異なります。コールスタックを巻き戻すための例外を使用せずにプログラム全体をメイン関数に戻すように設計するよりも、Environment.Exitを呼び出す方が簡単な場合があります(バックグラウンドスレッドからは機能しません。例外が発生した場合、またはメインメソッドまたはスレッドのキャッチロジックがそれを
認識

オプションの順番を入れ替えました。例外をスローすると、さまざまな実行可能環境でライブラリとしてコードを再利用しやすくなるという利点があります。
sinelaw 2013年

26

メイン機能の実行が完了すると、コンソールアプリケーションは終了します。「リターン」はこれを達成します。

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

エラーコードを返す場合は、次の方法で行うことができます。これは、初期スレッドの外部の関数からアクセスできます。

    System.Environment.Exit(-1);

9

あなたは使用することができるEnvironment.Exit(0)Application.Exit

Environment.Exit():このプロセスを終了し、基になるオペレーティングシステムに指定された終了コードを提供します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.