いくつかのソケットを適切に閉じて、閉じていることをサーバーに伝えたいのですが、アプリケーションが閉じられていると、ソケットがすべて閉じられ、ファイルがロックされたままになることがあります。アプリケーションが閉じているときにメソッドを実行するにはどうすればよいですか?
これは、フォーム アプリで使用されるライブラリに入れられます。
いくつかのソケットを適切に閉じて、閉じていることをサーバーに伝えたいのですが、アプリケーションが閉じられていると、ソケットがすべて閉じられ、ファイルがロックされたままになることがあります。アプリケーションが閉じているときにメソッドを実行するにはどうすればよいですか?
これは、フォーム アプリで使用されるライブラリに入れられます。
フォームにフォーカスを与えることができる Windows フォーム アプリケーションの場合は、プロパティ ウィンドウでイベントの稲妻をクリックし、フォームを閉じるイベントを使用します。
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(OnFormClosing);
private void OnFormClosing(object sender, FormClosingEventArgs e)
{
// Your socket logic here
}
また、閉じているフォームをインターセプトする必要がある場合は、Cancel プロパティを true に設定します。
e.Cancel = true;
これらのリソースを使用するクラスにIDisposableを実装します。Dispose は、アプリケーション タイプがサポートするシャットダウン メソッド (OnFormClose、OnStop、Application_End など) から明示的に呼び出すことができます。
WinForms アプリについて話しているのですか? その場合は、メイン フォームでFormClosing イベントを使用します。
それが最適な場所かどうかはわかりませんが、AppDomain.ProcessExitをフックすることで、プロセスが閉じていることを確認できます。クリーンアップには問題ありませんが、メッセージを送信するのに適した時期ではないと思います。:)