Я пытаюсь использовать WPF UI Automation без использования ложных операторов thread.sleep.То, что я хотел бы сделать, это иметь функцию GetElementById, которая постоянно опрашивает, пока элемент управления не доступен (или тайм-аут происходит).Проблема в том, что он, кажется, кэширует дочерние элементы управления моего родительского элемента.Можно ли освежиться детям?Или у кого-нибудь есть альтернативный подход?
public AutomationElement GetElementById(string id, int timeout)
{
if (timeout <= 1000) throw new ArgumentException("Timeout must be greater than 1000", "timeout");
AutomationElement element = null;
int timer = 0;
const int delay = 100;
do
{
element = MainWindow.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, id));
Thread.Sleep(delay);
timer += delay;
} while (element == null && timer < timeout);
if (element == null) throw new InvalidOperationException("Unable to find element with id: " + id);
return element;
}