显示处理集合的进度

时间:2015-06-24 04:12:59

标签: c# system.reactive reactiveui

我想知道处理项目集合并将进度显示回用户界面的最佳做法是什么。

以下代码大致是我编写的处理它的代码,但它看起来很脏:

Command = ReactiveCommand.CreateAsyncTask(_ => {
   return Task.Run(() => 
   {
       Parallel.ForEach(items, item =>
       {
           RunSlowProcess(item);

           Application.Current.Dispatcher.BeginInvoke(x =>
           {
               Progress += 1;
           }
       });
   }
}

我是否缺少一些重要的ReactiveUI概念?

1 个答案:

答案 0 :(得分:0)

由于所有并行模式在这里混合在一起似乎有点令人困惑:

我会建议更像(未经测试的):

Command = ReactiveCommand.CreateAsyncObservable(_ => {

  return items.ToObservable()
              .SelectMany(RunSlowProcess, 
                         (item, itemIndex, processed) => itemIndex);

})
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(i => Progress = i);