渲染线程的视觉树

问题描述:

我想有可能中止渲染线程,我还没有找到其他解决方案来解决我的问题: 我有一个MVVM架构的项目,在我的ShellView中我有一个带有按钮的菜单,可以在ContentControl中选择不同的视图。 由于每个视图中有许多控件,为了改善与用户的交互,我折叠了布局控件的可见性,该控件包含视图构造函数中的所有子控件,接下来在视图加载后呈现可见。 它允许在渲染子控件之前首先显示视图。渲染线程的视觉树

问题是在渲染过程中,如果我尝试更改视图,我必须等待显示新选定的当前视图的渲染。

所以我的想法是中止当前视图的渲染并优先显示新视图。我怎样才能做到这一点?

如果是你自己的代码花费时间在那个子控件中(例如,如果你使用Direct3D interop渲染3D游戏,或者在CPU上产生一些难以计算的位图,或者在GUI线程上使用阻塞I/O等)。 - 在这种情况下,您可以将该工作卸载到某个其他线程(或切换到非阻塞I/O,如果是这种情况),并且只更新一次完成的GUI线程。

但是,如果它是WPF渲染需要那么多时间,这意味着你的视觉树有什么问题。 Read this article for a start。如果幸运的话,您只需将几行XAML改为启用虚拟化。如果不是,则必须重新整理您的整个GUI以修复性能问题。