c# - WPF VisualTreeHelper.HitTest 使用多线程

标签 c# multithreading raycasting inkcanvas viewport3d

在我的应用程序中,在 Viewport3D 对象之上有一个透明的 InkCanvasViewport3D 显示了一个大的 3D 网格。用户将在 InkCanvas 上绘制草图,以便选择 Viewport3D 正在渲染的 3D 模型的一部分。允许用户在 InkCanvas 上绘制圆圈。
当用户绘制草图时,我遍历所有落在绘制圆内的点,并使用 VisualTreeHelper.HitTest 函数执行光线转换并确定 Viewport3D 的哪些顶点网格与草图重合。

问题是 VisualTreeHelper.HitTest 非常慢。如果我使用 Parallel.For,我仍然无法在 Viewport3D 上并行执行多个光线转换(因为 Viewport3D 对象的拥有线程是 UI 线程,我必须使用 Viewport3DDispatcher.Invoke 函数,这将破坏使用 Parallel.For 的目的首先。)

有没有办法使用多线程来加快速度?更好的是,是否有替代解决方案?

最佳答案

经过大量查找,我认为我想要的东西在WPF框架中是不可能的。为此,我切换到 OpenTK 并自己实现了光线转换。
现在我在 OpenTK 中有一个 WPF 模拟,性能要好得多。密码是available here如果有人感兴趣的话。

关于c# - WPF VisualTreeHelper.HitTest 使用多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30004430/

相关文章:

c# - 在 Unity 中将图层和位掩码与光线转换一起使用

c# - 输入 URL,如 http ://example. com 在操作输入中更改为 http :/example. com

C# 程序集注入(inject)检查

c# - 替换列表中每个字符串的空格

c# - 如何使用 System.Timers.Timer 访问/修改另一个线程上的控件?

c++ - 有没有比这样运行 255 个线程更快速、更有效的方法? CPP

c# - Unity Physics.Raycast 似乎没有正确检测到它击中的对象

c# - 升级到 .net 5 程序集缺少框架版本

multithreading - .NET最大线程堆栈大小?

c# - unity 霰弹枪制作