在我的应用程序中,我有一个事件处理程序,它监听一个事件,告诉它更新一些UI 每次从Web服务下载一个项目时都会触发此事件。
是否有可能让事件处理程序延迟处理这些事件,直到它们停止触发为止(例如,在最后一个事件被触发后三秒才更新UI?)
我目前的计划是记录自上次从事件处理程序更新UI以来的时间,当它超过某个阈值时,再次更新它,但我希望C#中存在原生内容。 击>
编辑:这不起作用,因为它依赖于后续事件来检查时间,如果我只收到一个事件,那将会失败。
答案 0 :(得分:2)
您可以使用RX扩展程序执行此操作。
Observable.Buffer方法缓存在给定时间跨度内到达的事件,然后为您提供包含所有源的平面列表。
Observable.Buffer(Observable.FromEvent(this, "DataUpdated"), TimeSpan.FromSeconds(3))
.ObserveOnDispatcher()
.Subscribe(e =>
{
// Do something here...
});
这将使所有事件持续3秒并调用处理程序。
答案 1 :(得分:0)
我会抽出一些东西。使用事件处理程序将事件通知的记录放入事件通知队列中。然后,启动另一个线程上的队列读取器(称之为ReadEventQueue()方法):