40

私は仕事で多くのコンソール アプリケーションを維持していますが、それらの多くで気づいたことの 1 つは、それらが Environment.Exit(0) を呼び出していることです。

サンプル プログラムは次のようになります。

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

元のプログラマーがこれを行う意図が何であったか理解できませんか? 私の考えでは、 Environment.Exit ステートメントがなくても、プログラムは正常に終了するはずです。とはいえ、これらのプログラムの 1 つについては、閉じられるはずだった後もコンソール ウィンドウが残っているので、そこで何が起こっているのか本当にわかりません....

ここで何か不足していますか?または、このインスタンスで Environment.Exit を呼び出す必要がある理由はありますか?

4

7 に答える 7

59

Exit()Main メソッドの最後の行として呼び出す唯一の理由は、他のフォアグラウンド スレッドが実行されている可能性がある場合です。実行がMain. この場合でも、他のスレッドに明示的な適切な終了を設定するか、最初からバックグラウンド スレッドにすることをお勧めします。

から別の終了コードを返したい場合Main、それを達成するためのより簡単な方法は、 return を宣言することintです。

要するに、私はあなたがEnvironment.Exit()ここにいる必要はないと思います。なぜそれを使用しているのかを同僚に正確に尋ねる価値があります。彼らはあなたに正当な理由を与えることができない可能性があり、それはあなたがカットできる別の綿毛です.アウト。

于 2009-03-28T07:10:18.613 に答える
16

基本的に、このステートメントEnvironment.Exit(0)は、これが「クリーンな」終了であることをオペレーティング システムに伝えます。他にも数字があり、それぞれ意味が異なりEnvironment.Exit(1)ます。

ただし、「Main」は「void」を返さないと宣言されているため、終了コードは実際には意味を持たないことに注意してください。

さまざまな終了コードについて詳しく知りたい場合は、こちらをご覧ください。

システム エラー コード (0 ~ 499)

于 2009-03-28T06:13:27.223 に答える
2

これは、コマンドライン プログラムが下層のシェルに成功または失敗を示すための (互換性) であり、main 関数のプロトタイプがあった古い C スタイルのメイン ループから継承されます。

int main(void);

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

戻り値 0 は伝統的に成功を意味し、プログラマーの決定に応じて、0 以外の値は失敗またはその他の何かを意味していました。

参考文献

于 2009-03-28T06:27:31.823 に答える