在我的应用程序中,我正在使用UI线程的空闲时间来卸载MSDN article on the WPF Threading Model所述的昂贵操作。
GenerateDataAction = () => { GenerateData(); };
Dispatcher.BeginInvoke(GenerateDataAction, DispatcherPriority.Render, null);
在GenerateDate()
方法中,我访问MSSQL数据库,处理数据,并更新viewmodel上的绑定。我注意到,自从实现这一点后,某些绑定无法正常更新或根本无法更新。我检查输出是否存在绑定错误并让第二个程序员确认逻辑,还在依赖属性更改方法中设置了断点(断点不会被命中)。
当被调用的动作包含绑定时,是否应该使用哪些 DispatcherPriority
(link to MSDN)的最佳实践建议?
答案 0 :(得分:3)
关于WPF调度程序的一篇非常好的文章:http://weblogs.asp.net/pawanmishra/archive/2010/06/06/understanding-dispatcher-in-wpf.aspx
作为WPF程序员,我们可以将自定义耗时的逻辑推入 由
Dispatcher
类维护的队列并关联较低的队列 该工作项的优先级值。基于优先级字段的值 相应的代码将以指定的间隔执行。 这里需要注意的重要一点是,所有工作仍在进行中 通过UIthread,它只是在我DispatcherPriority
的帮助下 优先考虑我们的任务。理想情况下,建议优先考虑 值小于7 (Render
)到我们希望的自定义逻辑 在Dispatcher的帮助下执行。最常见的是优先价值Background
用于特定于应用程序的自定义逻辑。女士 在这种机制的帮助下实现单词拼写检查 优先级值为ApplicationIdle
。