显示处理采集进度
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);
我想知道处理项目集合并将进度显示回 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);