我想知道处理项目集合并将进度显示回用户界面的最佳做法是什么。
以下代码大致是我编写的处理它的代码,但它看起来很脏:
Command = ReactiveCommand.CreateAsyncTask(_ => {
return Task.Run(() =>
{
Parallel.ForEach(items, item =>
{
RunSlowProcess(item);
Application.Current.Dispatcher.BeginInvoke(x =>
{
Progress += 1;
}
});
}
}
我是否缺少一些重要的ReactiveUI概念?
答案 0 :(得分:0)
由于所有并行模式在这里混合在一起似乎有点令人困惑:
我会建议更像(未经测试的):
Command = ReactiveCommand.CreateAsyncObservable(_ => {
return items.ToObservable()
.SelectMany(RunSlowProcess,
(item, itemIndex, processed) => itemIndex);
})
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(i => Progress = i);