显示处理采集进度

Displaying progress of processing collection

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

下面的代码大概是我写的来处理的,不过好像挺脏的:

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

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

是否有我遗漏的 ReactiveUI 的一些主要概念?

似乎有点混乱,因为所有并行模式在这里混合在一起:

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

Command = ReactiveCommand.CreateAsyncObservable(_ => {

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

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