は、私は通常私のアプリケーションを終了するために、KeyDown
サブに次の行を追加しましたリソースを解放するという点でアプリケーションを終了する最悪の方法の1つです。アプリケーションを正しく終了するにはどうすればいいですか?実際にはありません<code>End</code>は、それはそれはおそらくであることが判明したものにドキュメントを読めば、</p> <pre><code>If e.KeyCode = Keys.Escape Then End </code></pre> <p>しかし:過去に
これで、すべてのリソースなどを適切に処理するアプリケーションを終了するための推奨方法を見つけようとしています。 SOの2つの質問(hereと here)しかし私は結論できません実際の正解は何ですか?
first linkの回答では、すべてのフォームにClose()
を適用すると正しい方法であり、正しく使用されているすべてのリソースが解放されます。これは、複数のフォームを持つアプリケーションでは便利ではない、とApplication.Exit()
が示唆されたダウンさらに、さらには:間違いなくなります
Application.Exit()
End
は必ずプログラムは、最初の行が失敗しても終了します。一方
は、 second linkの受け入れ答えは、上記とあらゆる形態のApplication.Exit()
通話
Close()
を言うさらに下に答えを矛盾、「
は、あなたが適切に設計されたアプリケーションに
Application.Exit()
を呼び出す必要がありません」と言います.Netの後のバージョンでは。
これは私に混乱をもたらしました - Application.Exit()
で何が問題になっていますか?
それに問題がなければ、私は右に行くには最高の1がある思考で午前:
Application.Exit()
End
またはそれをやり過ぎということでしょうか?それ以外の場合は、いつApplication.Exit()
が機能しなくなるのですか?
注:複数の書式を含むすべてのプログラムにこの質問が当てはまりますが、私は最近コンピュータ同士を接続するためにソケット(TcpClient/Listener
クラス)を使用し始めました。接続途中のプログラム。私のrecent questionのコメントは、Socket.Close()
という呼出しが必要ではないことを私に保証します、しかし、今私はEnd
を使用していたので、これが完全に真実ではないかもしれません。
'が、私はあなたがEnd'の実行が直ちに終了されます'呼び出す-if before'を終了するために、エンドを使用していたので、今、私は、これは完全に真実ではないかもしれないことを認識し、優雅なガベージコレクションはありません(すべてがOSによってリリースされる)。したがって、 'End'を使用して接続を正常に閉じるには、' Socket.Close() 'を呼び出す必要があります。 **しかし**もし 'End'を使うと、ソケットの処分が完了する前に実行を終了する可能性があります。アプリケーションリリースに 'End'を使用することは推奨されません。 –
@VisualVincentありがとう、私は '終わり'を避けるだろうと思う。 btwなぜ質問は編集?これは.NETにのみ適用されますか? – Shuri2060
タイトルから「VB」を削除しました。不要で、あなたの言語やタグをそこに書き込むことを推奨していません。 'vb.net'で質問にタグを付けると、既に使用している言語が示されているので十分です。参照:[**質問にはタイトルにタグを含める必要がありますか?**](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles) –