4

我有一个 listBox 并正在观察何时选择项目:

selectedItems.Subscribe(DoWorkWIthSelectedItems);

observable 返回一个 viewModel 项目的数组,在DoWorkWIthSelectedItems我浏览选定项目的列表并做一些工作。但是,由于用户可能会非常迅速地打开/关闭垃圾邮件选择,因此每当对某个项目完成工作时,我不希望在 30 秒内再次对该项目进行任何工作。30 秒后,如果再次选择该项目,请继续进行操作。

有没有一种 Rx 方法可以做到这一点?我不确定它是 Sample 还是 Throttle。此外,我不知道使用 Rx 是否能够区分数组中适合处理或应该忽略的项目。我是否需要 viewModel 项上的附加属性来指示某些“工作”状态?

谢谢。

4

1 回答 1

1

不管是什么,都必须有某种状态。我认为您最简单的解决方案类似于(伪代码)

var recentlyUsed = new ConcurrentDictionary<T, DateTime>();
...
selectedItems
    .Do(/* remove expired items from recentlyUsed */)
    .Where(/* items are not in recently used */)
    .Do(/* add items to recently used */)
    .Subscribe(DoWorkWIthSelectedItems);  
于 2013-10-05T18:45:38.763 回答