2012-05-05 22 views
0

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

I/O操作の途中で、I/O操作を実行せずにアプリケーションを終了したい場合。

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

強制的にI/O操作をキャンセルする方法はありますか?

+0

強制的に、フォーム終了イベントでプロセスを終了できます。 –

+0

Application.Exit();を試してください。フォーム上閉鎖イベント – Prashant

+0

I/O操作のコードはどのように見えますか? –

答えて

1

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

1

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

Application.Exitは、メッセージループによって終了するように求めます。それは起こらないかもしれない。

実行する可能性のあるバックグラウンド以外のスレッドを閉じることをお勧めします。そうしないと、プロセスが実行され続けることになります。

また、Environment.ExitまたはEnvironment.FailFastを試すこともできます。これはあなたのプロセスを殺すようなものです。

1

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

は、このようにそれを行うにしてみてください。

Thread somethread = new Thread(...); 
someThread.IsBackground = true; 
someThread.Start(...); 
2

私はあなたが以下をお勧めします:

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

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

関連する問題