0

私の問題は、キャプション バーのクローズ ボックスを使用してフォームを閉じると、アプリケーションが終了しないことです。

I/O 操作の途中で、I/O 操作を実行せずにアプリケーションを終了したいと考えています。

実際にはプログラムが閉じられているように見えますが、タスク マネージャーのプロセス リストは閉じていないことを示しています。

I/O 操作を強制的にキャンセルするにはどうすればよいですか?

4

4 に答える 4

2

次のことをお勧めします。

  1. I/O 操作を非同期モード (BeginXXX、EndXXX を使用) に変更すると、簡単に停止できます。
  2. 同期イベントを使用して、すべてのスレッドを停止します。
  3. すべてのスレッドを追跡し、Kill メソッドを呼び出します。

他のポイント (2 または 3) と一緒に使用される最初のポイントで十分です。幸運を!

于 2012-05-06T16:52:21.830 に答える
1

アプリで実行中の無限ループがある場合、スレッドを開始する前にバックグラウンド スレッドで実行すると、アプリケーションの終了時にスレッドが自動的に閉じられます。

このようにしてみてください:

Thread somethread = new Thread(...);
someThread.IsBackground = true;
someThread.Start(...); 
于 2012-05-05T17:03:03.907 に答える
1

フォームを閉じると、フォームが見えなくなるだけです。ただし、メイン スレッドまたは他のスレッドで実行中のプロセスがある場合、アプリは終了しません。すべてのリソースが閉じられているか破棄されていることを確認する必要があります。

于 2012-05-05T16:50:03.217 に答える
1

どのようにアプリケーションを閉じようとしていますか?

Application.Exit は、メッセージ ループを介して終了するよう要求するだけです。それは起こらないかもしれません。

最善の方法は、実行中のバックグラウンド以外のスレッドをすべて閉じることです。そうしないと、プロセスが実行され続けます。

Environment.Exit または Environment.FailFast を試すこともできます。これは、プロセスを強制終了するようなものです。

于 2012-05-05T16:51:04.313 に答える