WPF中的DispatcherPriority

9

是否有关于每个DispatcherPriority枚举值的确切含义以及其与WPF应用程序的关系的文档。

特别是,在Background / ContextIdle / ApplicationIdle之间是否存在任何实际区别?我发现自己在代码的不同部分使用了这些值,并希望标准化一个值。

典型的用法是在数据绑定的TreeView控件中。当设置一个项目为选定状态(在ViewModel中)时,我希望首先展开其所有父项(同样在ViewModel中),然后等待它们完全呈现(在View中)才实际设置选定属性。


好问题,但“随便选一个”可能是一个足够的答案。 - H H
我认为应用程序空闲可能会比其他两个稍微延迟一些。无论如何,我会选择执行所需操作的最高优先级类,并考虑是否真的需要以这种方式进行调度 - 因为如果不小心,它可能会导致应用程序不稳定。 - Adam Brown
1
哪个是“Background”,也可能最能代表你想做的事情,即在后台运行某些东西。话虽如此,删除任何DispatcherPriority的出现后,我的代码看起来更好了。 - Clemens
1
你可以查看WPF线程模型。虽然不完整,但我认为这是一个很好的开始。 - Martin Backasch
我的经验是,在获取渲染视图中的一些信息之前,我喜欢等待所有wpf渲染完成。例如,如果您想从视图(Usercontrol)访问对象并且出于任何原因想要直接从代码后台访问它,请使用“ContextIdle”优先级。 - deafjeff
我还没有找到确切的定义,所以最好的地方可能是查看Dispatcher的参考源代码。不过它有点啰嗦,祝你好运。 - Bradley Uffner
1个回答

2
最好理解它实际上是如何工作的,是查看其源代码。
.Net Framework源代码可在https://referencesource.microsoft.com/获取。
您可以在查看和理解此代码后获得有关您问题的答案https://referencesource.microsoft.com/#WindowsBase/Base/System/Windows/Threading/Dispatcher.cs,ad208569500b2a1d
我快速地理解:有很多优先级只是为了更精确地指定操作的优先级(如果需要)。没有隐藏的事件/状态来执行特定优先级的操作。算法将选择具有最高优先级的任务并调用它,依此类推。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接