Поиск потомков довольно медленный, так как он будет go проходить через все объекты в дереве, пока не найдет нужный элемент управления (или не останется никаких элементов управления). Возможно, будет гораздо быстрее использовать шаблон сетки, чтобы найти нужные ячейки или получить все строки сразу и l oop через них.
В качестве альтернативы вы можете попробовать кэшировать, так как UIA использует межпроцессные вызовы, которые обычно медленны , Таким образом, каждый метод Find или свойство value выполняет такой вызов. Если у вас большая сетка, это может привести к довольно плохим результатам. Для этого случая использование UIA Caching может иметь смысл. Для этого вы получите все, что вам нужно (все потомки таблицы и шаблон LegacyIAccessible) в одном go внутри запроса кеша, а затем l oop через эти элементы в коде с CachedChildren и тому подобное. Простой пример этого можно найти в вики FlaUI по адресу https://github.com/FlaUI/FlaUI/wiki/Caching:
var grid = <FindGrid>.AsGrid();
var cacheRequest = new CacheRequest();
cacheRequest.TreeScope = TreeScope.Descendants;
cacheRequest.Add(Automation.PropertyLibrary.Element.Name);
using (cacheRequest.Activate())
{
var rows = _grid.Rows;
foreach (var row in rows)
{
foreach (var cell in row.CachedChildren)
{
Console.WriteLine(cell.Name);
}
}
}