【发布时间】:2014-08-07 11:25:59
【问题描述】:
我有一个 DevExpress GridControl 单向绑定到视图模型中的表视图。大约有 20 个后台线程从数据库中查询数据并单独更新 tableview。对表视图的更新是带锁的,用于异步更新。 Dispatcher 用于刷新主 UI 线程。我还有另一个按钮可以通过 CancellationTokenSource 取消数据库和更新功能。
但是,当应用程序运行时,我必须多次单击取消按钮才能执行取消命令中的代码。换句话说,UI 主线程忙于刷新 GridControl 并阻塞了取消按钮。
有没有办法实现这个功能?
编辑:发现这个方法很有帮助等待 Dispatcher.Yield(DispatcherPriority.ApplicationIdle); 它只是让其他 UI 控件有机会执行。
创建一个可等待对象,该对象以异步方式将控制权交还给当前调度程序,并为调度程序提供处理其他事件的机会。 (MSDN)
【问题讨论】:
-
UI 线程忙的时候就忙了。也许您可以更有效地更新数据绑定数据集合?也许只是更新更改,而不是每次都更新整个集合?