2012-04-26 16 views
1

私のアプリには奇妙なエラーがあります。バックグラウンドスレッドと複数の通常スレッドがあります。アプリケーションを閉じると、通常のスレッドはすべて終了し、バックグラウンドのスレッドは引き続き動作します。終了アプリケーションでバックグラウンドスレッドが閉じない

私は並列スタックをチェックしました。バックグラウンドスレッドだけが動作しています。

内部からバックグラウンドスレッドを終了できるようにアプリケーションが終了しているかどうかを確認する方法を教えてください。

+0

これを再度チェックします。 bgスレッドは終了時に(常に)終了する必要があります。それは本当にQuitをブロックしているのですか、何かを待っているメインスレッドですか? –

+1

これは後方に向かっています。シンプルで信頼できる方法は、スレッドが終了するようにアプリに伝えることです。 AutoResetEventを使って簡単に実行できます。 Thread.IsBackgroundは、失礼な中止を求める最善の方法です。 –

+0

'Thread.IsBackground = true;'の場合、このような問題はありません。私はまだ見たことがない。 –

答えて

0

アプリケーションにバックグラウンドスレッドへの参照がある場合は、アプリケーション終了時にthread.Abort()メソッドを呼び出します。

使用するフレームワークによっては、他にもオプションがあります。たとえば、WPFでは、バックグラウンドスレッドがApplication.Exitイベントを処理することがあります。

new Thread(new ThreadStart(() => 
{ 
    var thread = Thread.CurrentThread; 

    Dispatcher.Invoke((Action)delegate 
    { 
     Exit += (obj, args) => thread.Abort(); 
    }); 

    while (true) ; // background thread is always busy 
})).Start(); 
関連する問題