В моем приложении есть прозрачный InkCanvas
поверх объекта Viewport3D
. Viewport3D
показывает большую трехмерную сетку. Пользователь набросит на InkCanvas
, чтобы выбрать часть 3D-модели, которую рендерит Viewport3D
. Пользователю разрешено рисовать круги на InkCanvas
.
Когда пользователь наброски, я перебираю все точки, которые попадают внутрь рисованного круга, и я использую функцию VisualTreeHelper.HitTest
для выполнения raycasting и определения, какие вершины сетки Viewport3D
совпадают с эскизом.WPF VisualTreeHelper.HitTest с использованием нескольких потоков
Проблема в том, что VisualTreeHelper.HitTest
очень медленный. В случае, если я использовал Parallel.For
, я все равно не смог бы выполнить несколько raycastings на Viewport3D параллельно (из-за того, что собственный поток объекта Viewport3D
является потоком пользовательского интерфейса, и мне нужно будет использовать Viewport3D
Dispatcher.Invoke
что в первую очередь приведет к поражению цели: Parallel.For
.)
Есть ли способ ускорить это, используя несколько потоков? Еще лучше, есть ли альтернативное решение?