可视化树的渲染线程
Rendering Thread of visual tree
我希望有可能中止渲染线程,我还没有找到解决我的问题的其他方法:
我有一个采用 MVVM 架构的项目,在我的 ShellView 中,我有一个带有按钮的菜单,我可以在 ContentControl 中 select 不同的视图。
由于每个视图中有很多控件,为了改善与用户的交互,我在视图的构造函数中折叠了包含所有子控件的布局控件的可见性,然后在加载视图后呈现可见性。
它允许在呈现子控件之前首先显示视图。
问题出在渲染过程中,如果我尝试更改视图,我必须等待当前视图的渲染,然后才能显示新的 selected。
所以我的想法是中止当前视图的渲染,优先显示新视图。我该怎么做?
如果是您自己的代码在该子控件中花费时间(即,如果您使用 Direct3D 互操作渲染 3D 游戏,或者在 CPU 上生成一些难以计算的位图,或者使用阻塞 I/O 在 GUI 线程上,等等。)——在这种情况下,您可以将该工作卸载到其他线程(或者切换到非阻塞 I/O,如果是这种情况),并且只更新一次 GUI 线程完成。
但是如果是WPF渲染那么耗时,说明你的visual tree有问题。 Read this article for a start。如果你幸运的话,你只需要将 XAML 的几行更改为例如启用虚拟化。否则,您将不得不重新设计整个 GUI 以解决性能问题。
我希望有可能中止渲染线程,我还没有找到解决我的问题的其他方法: 我有一个采用 MVVM 架构的项目,在我的 ShellView 中,我有一个带有按钮的菜单,我可以在 ContentControl 中 select 不同的视图。 由于每个视图中有很多控件,为了改善与用户的交互,我在视图的构造函数中折叠了包含所有子控件的布局控件的可见性,然后在加载视图后呈现可见性。 它允许在呈现子控件之前首先显示视图。
问题出在渲染过程中,如果我尝试更改视图,我必须等待当前视图的渲染,然后才能显示新的 selected。
所以我的想法是中止当前视图的渲染,优先显示新视图。我该怎么做?
如果是您自己的代码在该子控件中花费时间(即,如果您使用 Direct3D 互操作渲染 3D 游戏,或者在 CPU 上生成一些难以计算的位图,或者使用阻塞 I/O 在 GUI 线程上,等等。)——在这种情况下,您可以将该工作卸载到其他线程(或者切换到非阻塞 I/O,如果是这种情况),并且只更新一次 GUI 线程完成。
但是如果是WPF渲染那么耗时,说明你的visual tree有问题。 Read this article for a start。如果你幸运的话,你只需要将 XAML 的几行更改为例如启用虚拟化。否则,您将不得不重新设计整个 GUI 以解决性能问题。