0

このようなものはありBackgroundWorkerますか?DoWork関数がコールバックで終了すると、関数ProgressChangedが終了していることに応じて、この進行状況の値で取得します。

コード例:

bw.DoWork += (a,b) => {
  foo();
  baa();
  if(..) else {  }
};

各ステートメントが終了すると、私はそれを取得します

  bw.ProgressChanged += (o, e) => {
                   MessageBox.Show(e.ProgressPercentage);
   };

私は3つの統計を持っています、それは3つを印刷する必要がありますMessage.Show():33,66,100

33%=>foo()が実行されました。

66%=>baa()が実行されました。

100%=> if(..) else { }最後のステートメントが実行されました。

.ReportProgress()コールバックイベントで実行される各関数/ステートメント内でメソッドを呼び出すことはできDoWorkますが、ステートメント番号によっては、これは避けられない場合があります。

これが明確であることを願っています。そして、私の悪い英語をお詫びします。

4

2 に答える 2

2

私があなたの質問を理解しているなら; 答えは「いいえ、バックグラウンドワーカーが進行状況を自動的に報告する方法はありません」です。

に明示的に電話をかける必要があります .ReportProgress()

bw.DoWork += (a,b) => {
  foo();
  worker.ReportProgress(33);
  baa();
  worker.ReportProgress(66);
  if(..) else {  }
};

DoWork本体で多数のメソッド呼び出しを実際に処理している場合は、賢くなり、アクションのキューを作成し、各アクションを呼び出し、それぞれの後にReportProgressを呼び出すなどの操作を行うことができます。

于 2012-05-31T18:58:00.807 に答える
2

次のアプローチに問題はありますか?

bw.DoWork += (a,b) => {
  foo();
  bw.ReportProgress(33);
  baa();
  bw.ReportProgress(66);
  if(..) else {  }
  bw.ReportProgress(100);
};

私は、ReportProgress内部に電話をかけるfoobaa、何らかのやむを得ない理由がある場合にのみ電話をかけます(つまり、33から66に、一度に数パーセントずつ、内部にインクリメントしますfoo)。

于 2012-05-31T18:58:04.703 に答える