Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 可视化树的绘制线程_Wpf_Multithreading_Mvvm_Rendering - Fatal编程技术网

Wpf 可视化树的绘制线程

Wpf 可视化树的绘制线程,wpf,multithreading,mvvm,rendering,Wpf,Multithreading,Mvvm,Rendering,我希望有可能中止渲染线程,我还没有找到解决问题的其他解决方案: 我有一个MVVM架构的项目,在我的ShellView中有一个带有按钮的菜单,我可以在ContentControl中选择不同的视图。 由于每个视图中都有许多控件,并且为了改进与用户的交互,我将折叠布局控件的可见性,其中包含视图构造函数中的所有子控件,然后在加载视图后渲染为可见。 它允许在呈现子控件之前首先显示视图 问题是在渲染期间,如果尝试更改视图,则必须等待当前视图的渲染,然后才能显示新选定的视图 因此,我的想法是中止当前视图的渲染

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

问题是在渲染期间,如果尝试更改视图,则必须等待当前视图的渲染,然后才能显示新选定的视图


因此,我的想法是中止当前视图的渲染,并优先显示新视图。我该怎么做?

如果是您自己的代码在该子控件中占用时间(即,如果您使用Direct3D interop渲染3D游戏,或者在CPU上生成一些难以计算的位图,或者在GUI线程上使用阻塞I/O等),在这种情况下,您可以将该工作转移到其他线程(如果是这种情况,也可以切换到非阻塞I/O),并且只在完成后更新GUI线程

但是,如果WPF渲染花费了那么多时间,这意味着您的可视化树有问题。如果幸运的话,您只需要更改几行XAML即可,例如启用虚拟化。如果不需要,您将不得不修改整个GUI以解决性能问题