2012-10-24 28 views
41
対Enviroment.Exit対App​​lication.Exit

以下は、私たちがアプリケーションを終了することが可能な方法がありますこれらの3つの方法の違いは、それぞれを使用する場合ですか?のWinforms:</p> <ol> <li><code>Enviroment.Exit(0)</code></li> <li><code>Application.Exit()</code></li> <li><code>Form.Close()</code></li> </ol> <p>何:Form.Close

+5

メイン・メソッドで終了コードを返します。これは、重複した問題ではないことをしたい場合。私はアプリケーションを終了するためにどちらを使用するか尋ねていません。私は同様の操作を実行するので、これらのメソッドの違いを尋ねています。 –

答えて

75

適切な方法はApplication.Exit()です。 Documentationによれば、すべてのメッセージループを終了し、すべてのウィンドウを閉じて、フォームに(Form.OnCloseなどで)クリーンアップコードを実行する可能性を与えます。

Environment.Exitは、プロセスを強制終了します。何らかの形が例えば保存されていない変更を保存する必要があるかどうかをユーザーに確認する機会はありません。また、リソース(データベース接続など)が正しく解放されず、ファイルがフラッシュされないなどの問題が発生する可能性があります。

Form.Closeこれはフォームを閉じます。他のフォームが開かれている場合(アプリケーションの将来のバージョンではないかもしれませんが)、アプリケーションは終了しません。

マルチスレッドを使用すると、Application.Exit()はスレッドを終了しないため、GUIが終了してもアプリケーションはバックグラウンドで動作し続けます。したがって、主な機能(つまり、Program.Main())またはメインフォームのOnCloseイベントのいずれかで、スレッドを削除するための対策を講じる必要があります。

+2

+1のドキュメント参照 –

+3

プロセスが終了しないようにスレッドにIsBackgroundプロパティを設定できます。 –

+1

ファイルのフラッシュについて本当に真実はありますか?プロセスが強制終了されると、OSは既存のすべてのハンドルを閉じて、ハンドルもフラッシュします。 –

2

これらはすべて問題ありません。 しかしform.Close()はあなたのアプリケーションを閉じません それはフォームを閉じ、その後 メインメソッドはint(終了コード)を返します。

あなたはexitcodesを使用してアプリケーションを終了するには Environmet.Exit(exitcode)を使用するか、

関連する問題