Windowsフォームを閉じるときは、次を使用できます。
this.Close();
Application.Exit();
Environment.Exit(0);
Environment.Exit(1);
Environment.Exit(-1);
これらのオプションの違いは何ですか? どちらか一方を使用する必要があるのはなぜですか?
以下は、MSDN からのこれらの説明です (およびいくつかの追加コメント)。
this/Form.Close ()、Form
インスタンスのコンテキスト内から呼び出されます。
フォームを閉じます。
これは、アプリケーション内で開いたままの最後のフォームであり、他のフォアグラウンド スレッドが実行されていない場合にのみ、アプリケーションを終了することに注意してください。
すべてのメッセージ ポンプに終了する必要があることを通知し、メッセージが処理された後にすべてのアプリケーション ウィンドウを閉じます。
アプリケーション内のどこからでも呼び出すことができるメソッドで、フォアグラウンド スレッドのすべてのメッセージ ポンプを終了します。この場合も、メッセージ ループが実行されていない他のフォアグラウンド スレッドは終了しないため、アプリケーションが閉じられる保証はありません。
オプションの終了コードを指定したEnvironment.Exit ()。
このプロセスを終了し、基になるオペレーティング システムに指定された終了コードを提供します。
これは、内部で実行されているすべてのスレッドを終了することによってプロセスを終了しようとし、終了コードをオペレーティング システムに返します。これは、たとえば、最初にアプリケーションを生成したバッチ ファイルに失敗ステータスを返すために使用できます。これは通常、プロセスを強制的に終了する必要がある場合にのみ使用され、スレッドが終了するまで待機する必要がある場合、アプリケーションをすぐに閉じない場合があります。
Application.Run(mainForm)
標準アプリケーション メッセージ ループを呼び出すと、現在のスレッドで実行が開始され、指定されたフォームが表示されます。また、このメソッドは、イベントの mainForm にイベント ハンドラーを追加しますClosed
。イベント ハンドラーはExitThread
、アプリケーションをクリーンアップするために呼び出します。ExitThread
現在のスレッドのメッセージ ループを終了し、スレッドのすべてのウィンドウを閉じます。Close
メインフォームを呼び出すとどうなるか。
Application.Exit()
プロパティFormClosing
によって表されるすべてのフォームに対してイベントを発生させるだけです。OpenForms
このイベントはどのような形でもキャンセルできます。この場合、Exit はそれ以上のアクションなしで戻ります。それ以外の場合は、FormClosed
開いているフォームごとにイベントが発生し、実行中のすべてのメッセージ ループとフォームが閉じられます。
Environment.Exit
プロセスを (残忍に) 終了し、基になるオペレーティング システムに指定された終了コードを与えます。ゼロ以外のコードを渡すと、アプリケーションでエラーが発生したことを示します。これは、アプリケーションを強制終了する最速の方法です。