Я на самом деле не проверял следующее, поэтому используйте на свой страх и риск (-:
Я предполагаю, что чтение ActualWidth / Height является потокобезопасным.
public FrameworkElement FindIntersectingElement(Rect rectangle, UIElement activeElement)
{
FrameworkElement found = null;
System.Threading.Tasks.Parallel.ForEach((IEnumerable<UIElement>)MainPanel.Children,
(child, loopState) =>
{
if (child != activeElement)
{
if (GetBounds(child as FrameworkElement, MainPanel).IntersectsWith(rectangle))
{
found = child as FrameworkElement;
loopState.Stop();
}
}
});
return found;
}
И чтобы ответить на заглавный вопрос: вы можете увидеть некоторое ускорение, и со многими вложенными элементами это может стоить того. Это (поиск по дереву) является редким случаем, когда вы можете увидеть улучшение, превосходящее линейное.