私の問題は、キャプション バーのクローズ ボックスを使用してフォームを閉じると、アプリケーションが終了しないことです。
I/O 操作の途中で、I/O 操作を実行せずにアプリケーションを終了したいと考えています。
実際にはプログラムが閉じられているように見えますが、タスク マネージャーのプロセス リストは閉じていないことを示しています。
I/O 操作を強制的にキャンセルするにはどうすればよいですか?
次のことをお勧めします。
他のポイント (2 または 3) と一緒に使用される最初のポイントで十分です。幸運を!
アプリで実行中の無限ループがある場合、スレッドを開始する前にバックグラウンド スレッドで実行すると、アプリケーションの終了時にスレッドが自動的に閉じられます。
このようにしてみてください:
Thread somethread = new Thread(...);
someThread.IsBackground = true;
someThread.Start(...);
フォームを閉じると、フォームが見えなくなるだけです。ただし、メイン スレッドまたは他のスレッドで実行中のプロセスがある場合、アプリは終了しません。すべてのリソースが閉じられているか破棄されていることを確認する必要があります。
どのようにアプリケーションを閉じようとしていますか?
Application.Exit は、メッセージ ループを介して終了するよう要求するだけです。それは起こらないかもしれません。
最善の方法は、実行中のバックグラウンド以外のスレッドをすべて閉じることです。そうしないと、プロセスが実行され続けます。
Environment.Exit または Environment.FailFast を試すこともできます。これは、プロセスを強制終了するようなものです。