application_deactivatedイベントでのBackgroundWorkerをキャンセルどのくらいの時間がかかるのだろうと思っています。私は労働者を取り消したいだけです。この問題は、イベントハンドラが完了した後、アプリケーションがすべてのスレッドを強制終了し、正しくキャンセルできなくなるという問題があります。私がやりたい何私は私のバックグラウンドワーカーは、Webサービスとの同期が、私はできるとされているWindows PhoneでApplication_Deactivatedイベントで私のバックグラウンドワーカーを取り消すと7</p> <p>の問題を少し持っていますWP7
は次のようなものです:
Application_Deactivated
{
Backgroundworker.RunWorkerCompleted += bw_completed;
Backgroundworker.Cancel async
// wait till completed event which confirm the background thread has been cancelled
}
は、私が最初のイベントハンドラでAutoResetEventを使用しようとしたが、これは動作しませんApp.xaml.csスレッドがメインである原因このスレッドでこの待機が発生すると、アプリケーション全体がブロックされます。
イベントハンドラでcancelAsyncが呼び出された後、アプリケーションは休止状態になり、実際のバックグラウンドワーカーで呼び出されたWebハンドラを再開すると、Webレスポンスのnull参照に関するエラーが発生します。
私はすでにバックグラウンドワーカーで保留中のキャンセルをチェックしています。キャンセル機能はキャンセルボタンでテストされているため、問題はありません。それは純粋に私は、バックグラウンドワーカーが適切に出るまで待つ必要があるということです。
私はこの1つのように、このサイト上のいくつかの結果が見つかりました: How close BackgroundWorker thread when application is deactivated?
しかし、唯一のThreadAbortExceptionので解決策を与えたが、私はむしろ、このいずれかを使用していないことを。
さらにコードが必要な場合は、それを提供できます。
タイムアウト機能を作成しようとしていますか? –
いいえ、私はバックグラウンドスレッドが中止またはエラーで取り消されるまで、アプリケーションが休止状態になるのを待つことを試みています。私は10秒待つが、アプリケーション全体がハングアップすることなくこの時間を請求する方法を見つけることができません。 – arjanhgroen
[アプリケーションが非アクティブ化されたときのBackgroundWorkerスレッドのクローン数]の可能な複製?](http://stackoverflow.com/questions/7620098/how-close-backgroundworker-thread-when-application-is-deactivated)この質問の答えは、あなたのワーカースレッドで 'CancellationPending'に応答できることを言います - あなたがしなければ' ThreadAbortException'がスローされます。 –