2011-06-29 9 views
4

擬似プロセスが のWPF/C#アプリケーションボタンをクリック>スレッドを開始してWebカムAPIから画像を取得> WebカムAPIをインスタンス化する> APIがコールバックスレッドを開始>画像が取得される> APIオブジェクトが配置されているすべてのスレッドが閉じているか、強制的にスレッドを閉じていることを確認しますか?

これらの手順は、通常、WebカムAPIのコールバックスレッドが終了しない最後の部分を除いて機能します。だから、私の仕事マネージャーでは、私はいつも私のベースWPFアプリケーションと同じ名前を共有する "ゴースト"プロセスで終わります。また、2番目の画像を撮るために同じWebカムAPIへの2回目の呼び出しを行うと、惨めに失敗します。

私は、ルートアプリケーションのすべてのスレッドが常に強制的に閉じられていることを確認する方法を見つけようとしています。スレッドが残っていないことを確認する方法はありますか?

+0

デバッガを一時停止し、スレッドが何をしているのかを調べます。 – SLaks

+0

スレッドは明示的にバックグラウンドスレッドとして設定されていますか? –

答えて

8

これらのスレッドでをtrueに設定すると、シャットダウン時に終了します。

+2

しかし、基本的な問題は解決しません。 – SLaks

+1

@SLaks:それは当然のことですが、これがここで求められたものです。 (実際の問​​題を解決するには、おそらく、APIコールがタイムアウトして中断するようにタイマーを設定することをお勧めします) –

3

アプリにウィンドウがある場合は、Application.ShutdownModeをOnMainWindowCloseに設定します。これは、メインウィンドウが閉じたときに実行中のバックグラウンドスレッドを終了させます。プログラムでは、Environment.Exitを呼び出してすべてのスレッドを可能な限り正常に終了させます(ただし強制しない場合は強制的に終了します)。

0

メインプログラム以外にゴーストプロセスがある場合は、スレッドの問題ではありません。操作を実行するための他のプロセスを作成しました。それを殺します。あなたのリソースは解放されます。より大きな問題があるときにスレッドが実行されていることを心配する必要はありません。リソースにハングしている他のプロセスです。