web-dev-qa-db-ja.com

Winforms:Application.Exit vs Environment.Exit vs Form.Close

アプリケーションを終了する方法は次のとおりです。

  1. Enviroment.Exit(0)
  2. Application.Exit()
  3. Form.Close()

これら3つの方法の違いと、それぞれを使用するタイミングは何ですか?

56
Parag Meshram

適切なメソッドはApplication.Exit()です。 Documentation によると、すべてのメッセージループを終了し、すべてのウィンドウを閉じるため、フォームでクリーンアップコード(Form.OnCloseなど)を実行できるようになります。

_Environment.Exit_はプロセスを強制終了します。何らかの形式がある場合未保存の変更では、ユーザーに保存するかどうかを尋ねる機会がありません。また、リソース(データベース接続など)を適切に解放できなかった、ファイルがフラッシュされなかったなど。

_Form.Close_は、それが言うことをするだけです:フォームを閉じます。他のフォームを開いている場合(おそらく今ではなく、アプリケーションの将来のバージョンで)、アプリケーションは終了しません。

マルチスレッドを使用する場合、Application.Exit()はスレッドを終了しないことに注意してください(したがって、GUIが終了しても、アプリケーションはバックグラウンドで動作し続けます)。したがって、メイン関数(つまり、Program.Main())で、またはメインフォームのOnCloseイベントで、スレッドを強制終了する手段を講じる必要があります。

101
MartinStettner

彼らはすべて大丈夫です。しかし、form.Close()はアプリケーションを閉じず、フォームを閉じ、その後メインメソッドがint(exitcode)を返します。

アプリケーションを終了コードで終了させる場合は、Environmet.Exit(exitcode)を使用するか、メインメソッドで終了コードを返します。

4
codeteq