0

WPF アプリケーションで System.ComponentModel.BackGroundWorker を使用しています。だから、私がやっていることは流れるように

ユーザーがファイル ブラウザ コントロールを使用してファイルを選択し、インポート ボタンをクリックすると、wpf ダイアログにファイル ブラウザ コントロールとインポートとキャンセルという 2 つのボタンがあります。アプリケーションは大きなテキスト ファイルからデータを読み取る必要があるため、したがって、ファイルがロードされるまでテレリックビジーインジケーターを表示しています。ファイルパスが選択されたときに何をしますか

バックグラウンド ワーカーを作成し、do_work ハンドラーを割り当てる

this.backgroundWorkerThread = new BackgroundWorker
    {
      WorkerSupportsCancellation = true
    };
    // when the thread gets starts, call the function to be executed
    this.backgroundWorkerThread.DoWork += (sender,
                                           do_workArgs) =>
    {
      // import all scenarios
      do_workArgs.Result = this.ImportScenarios();
    };

this.backgroundworker.RunWorkerAsync() を呼び出します

ユーザーがキャンセルボタンをクリックすると、次のことを行います。

 if (
          (this.backgroundWorkerThread != null)
          &&
          (this.backgroundWorkerThread.IsBusy)
         )
      {
        this.backgroundWorkerThread.CancelAsync();
      }

問題:

このクローズは実際にはバックグラウンド ワーカーを破棄しますが、do ワーカー メソッドでは、args.result = import()Scenarios() で割り当てられたメソッドは終了せず、続行します。したがって、私が探しているのは、キャンセル ボタンをクリックすると全体がプロセスを終了する必要があります。私の場合、バックグラウンドワーカーのみが破棄されますが、do worked イベントハンドラーで割り当てられたメソッドは中止されないため、メソッドも中止したいと考えています。誰でも私に可能な解決策を提案できますか

4

0 に答える 0