WPF VisualTreeHelper.HitTest 使用多线程
WPF VisualTreeHelper.HitTest using multiple threads
在我的应用程序中,在 Viewport3D
对象之上有一个透明的 InkCanvas
。 Viewport3D
显示了一个大的 3D 网格。用户将在 InkCanvas
上绘制草图,以便 select Viewport3D
正在渲染的 3D 模型的一部分。允许用户在 InkCanvas
.
上画圆
当用户绘制草图时,我遍历所有落在绘制圆内的点,并使用 VisualTreeHelper.HitTest
函数执行光线投射并确定 Viewport3D
网格的哪些顶点与草图重合。
问题是 VisualTreeHelper.HitTest
非常慢。如果我使用 Parallel.For
,我仍然无法在 Viewport3D 上并行执行多个光线投射(因为 Viewport3D
对象的拥有线程是 UI 线程而且我必须使用 Viewport3D
的 Dispatcher.Invoke
函数,这将首先破坏 Parallel.For
的目的。)
有没有办法使用多线程来加快速度?更好的是,是否有替代解决方案?
经过多方查找,我想我想要的东西在WPF框架中是不可能的。为此,我切换到 OpenTK 并自己实现了光线投射。
现在我在 OpenTK 中有一个 WPF 模拟,性能要好得多。如果有人感兴趣,代码是available here。
在我的应用程序中,在 Viewport3D
对象之上有一个透明的 InkCanvas
。 Viewport3D
显示了一个大的 3D 网格。用户将在 InkCanvas
上绘制草图,以便 select Viewport3D
正在渲染的 3D 模型的一部分。允许用户在 InkCanvas
.
上画圆
当用户绘制草图时,我遍历所有落在绘制圆内的点,并使用 VisualTreeHelper.HitTest
函数执行光线投射并确定 Viewport3D
网格的哪些顶点与草图重合。
问题是 VisualTreeHelper.HitTest
非常慢。如果我使用 Parallel.For
,我仍然无法在 Viewport3D 上并行执行多个光线投射(因为 Viewport3D
对象的拥有线程是 UI 线程而且我必须使用 Viewport3D
的 Dispatcher.Invoke
函数,这将首先破坏 Parallel.For
的目的。)
有没有办法使用多线程来加快速度?更好的是,是否有替代解决方案?
经过多方查找,我想我想要的东西在WPF框架中是不可能的。为此,我切换到 OpenTK 并自己实现了光线投射。
现在我在 OpenTK 中有一个 WPF 模拟,性能要好得多。如果有人感兴趣,代码是available here。