クラスライブラリ内のオブジェクトのBackgroundWorkerによって実行された作業の進捗状況を報告するにはどうすればよいですか?BackgroundWorkerを使用しているときにクラスライブラリで実行された作業の進捗状況を報告する方法
ReportProgressを使用して情報をフィードバックする方法(循環依存のため、呼び出し元のクラスを参照できない)はこれまでのところ分かりません。
これは、作業を開始し、メインプロジェクトの例です:
namespace MainProject {
class MainWindowVM : INotifyPropertyChanged {
private BackgroundWorker _counterWorker;
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private int _progress;
public int Progress {
get { return _progress; }
set { _progress = value; NotifyPropertyChanged(); }
}
public MainWindowVM() {
var heavyWorker = new ClassLibrary.HeavyWorkerClass();
_counterWorker = new BackgroundWorker();
_counterWorker.DoWork += new DoWorkEventHandler(_counterWorker_DoWork);
_counterWorker.RunWorkerAsync(heavyWorker);
}
private void _counterWorker_DoWork(object sender, DoWorkEventArgs e) {
var heavyWorker = (ClassLibrary.HeavyWorkerClass)e.Argument;
heavyWorker.StartWork();
Progress = 100;
System.Windows.MessageBox.Show("Work completed!");
}
}
}
そしてここでは、クラスライブラリのアップロード方法の一例です:
namespace ClassLibrary {
public class HeavyWorkerClass {
public void StartWork() {
for (int i = 0; i <= 100; i++) {
Thread.Sleep(50);
}
}
}
}
は 'ReportProgress'メソッドに見てみますか? [there](https://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners)は、これに関する多くのチュートリアルの1つです – lena
あなたが何か問題があることを明確に示す良い[mcve]がなければどのような回答が必要かを知ることはできません(回答を投稿する人は、単に推測するだけで、実際のビジネスはありません)。 WPFプログラムを「普通に」書くと、UIオブジェクトにバインドされた 'INotifyPropertyChanged'を実装するビューモデルがあり、必要に応じてビューモデルのプロパティ値を設定できます。 WPFはあなたのためにすべてのクロススレッドのものを処理します。通常の方法でWPFを書いていない場合、それはより複雑になりますが、MCVEがなければ、正確な詳細は異なります。 –
[BackgroundWorkerを使用してGUIを更新する]の複製があります(http://stackoverflow.com/questions/5192169/update-gui-using-backgroundworker) –