私のアプリケーションにはメインウィンドウがあり、その中にフレームにページをロードします。ユーザーがボタンを押すと、このページは長時間のタスクを実行します。私の問題は、長いタスクが実行されているときにユーザーがメイン ウィンドウの閉じるボタンを押したときに、アプリケーションが終了していないように見えることです。これは、VS2008 でデバッグしていて、停止ボタンが強調表示されているためです。終了したい場合は、停止ボタンを押す必要があります。アプリケーションは、アプリケーションの終了時にデバッグを自動的に停止しません。.NET はアプリケーションの終了時にバックグラウンド ワーカーを自動的に停止すると思っていましたが、この動作を確認した後ではわかりません。アンロードされたイベントページでバックグラウンドワーカーを強制してキャンセルしようとしましたが、次のようなものです:
private void Page_Unloaded(object sender, RoutedEventArgs e)
{
// Is the Background Worker do some work?
if (My_BgWorker != null && My_BgWorker.IsBusy)
{
//If it supports cancellation, Cancel It
if (My_BgWorker.WorkerSupportsCancellation)
{
// Tell the Background Worker to stop working.
My_BgWorker.CancelAsync();
}
}
}
しかし、成功しませんでした。CancelAsync() を実行した後、数分後、backgroundworker が終了して RunWorkerCompleted が発生したことを確認できます。また、イベントで e.Cancelled 引数をチェックしてタスクが完了したことを確認できますが、このイベントが実行された後、アプリケーションは終了せずに続行し、何をしているかわからない....
最初にキャンセルをサポートするために、WorkerSupportsCancellation を true に設定します。
私はすべての答えに感謝します。ありがとう。