В моем тестовом приложении я постоянно открываю и заново открываю форму.Каждый раз, когда форма открывается, я должен поместить все элементы формы в AutomationElementCollection
, чтобы я мог работать с элементами.Тем не менее, кажется дорогостоящим многократное получение этих элементов (из-за древовидной навигации / переключения контекста и т. Д.).
Я попытался установить логическое значение для метода, который получает элементы.Если метод был вызван в первый раз, он запустится нормально и установит логическое значение true.Если метод вызывается во второй раз, он ничего не будет делать, так как массив уже заполнен.
Однако, когда я пытаюсь выполнить операции над любым AutomationElement
в массиве (во второй раз), элементы, кажется, не доступны.Закрытие формы как-то "отключает" эти элементы?Должен ли я находить эти элементы каждый раз, когда открываю форму, чтобы они были «свежими»?
Я посмотрел на способ CacheRequest
, но, похоже, он касается только доступа к свойствам / шаблонам, а не к элементам.
Вот код / сообщение об ошибке:
AutomationElement GAP;
AutomationElementcollection GAP1;
private bool initGAP1 = false;
public void initGAP()
{
if (!initGAP1)
{
int refnum = ...;
int refnum2 = ...;
AutomationElementCollection temp = MMChildren[refnum].FindAll(TreeScope.Children, findCondition);
GAP = temp.FindAll(TreeScope.Children, findCondition)[refnum2];
GAP1 = GAP.FindAll(TreeScope.Children, findCondition); //this contains the elements I want to operate on
initGAP1 = true;
}
}
System.Windows.Automation.ElementNotEnabledException: исключение типа 'System.Windows.Automation.ElementNotEnabledException' было сгенерировано.