31


5

私は仕事中に多くのコンソールアプリケーションを保守しています、そして私がそれらのうちのいくつかで気づいていた一つはそれらがEnvironment.Exit(0)を呼ぶということです。

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

パブリッククラスProgram {public static void Main(string [] args){DoStuff();} Environment.Exit(0); }}

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

私はここに何かが足りない? それとも、このインスタンスでEnvironment.Exitを呼び出すべきなのでしょうか。

5 Answer


49


Mainメソッドの最後の行として `+ Exit()`を呼び出す唯一の理由は、他のフォアグラウンドスレッドが実行されている可能性がある場合です。 実行が ` Main +`の終わりから外れた場合、それらは実行されたままになります。 この場合でも、他のスレッドに明示的なグレースフルターミネーションを使用するか、バックグラウンドスレッドで開始することをお勧めします。

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

要するに、ここで `+ Environment.Exit()+`が必要だとは思わないので、同僚にそれを使用している理由を正確に尋ねる価値はあります。それはあなたが切り取ることができるもう一つの綿毛です。


15


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

ただし、注意すべきことは、 "Main"は "void"を返さないものとして宣言されているため、終了コードには意味がないということです。

念のために、さまざまな終了コードについてもっと知りたいのなら、ここを見てください。


3


これは、コマンドラインプログラムが基礎となるシェルに成功または失敗を示すための[互換性]であり、main関数のプロトタイプが元々あった古いCスタイルのメインループから継承されます

int main(void);

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

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

参照

`+ main +`関数の詳細については、http://en.wikipedia.org/wiki/Main_function_(programming)[wiki]を参照してください。

MSDN documenttion on + Environment.Exit()+

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


0


他のアプリケーションがコンソールアプリケーションの結果を待っているときに、これは本当に使われます。 たとえば、SSRS(ツール)はコンソールアプリケーションを起動し、失敗の応答の成功を取り戻すのを待ちます。 Environment.Exit(0)は、成功した実行メッセージを返します。


0


SSISでプロセス実行タスクがあり、プロセスが失敗したかどうかを知りたい場合は、この方法が便利です。