Почему исключения, перехваченные клиентом автоматизации пользовательского интерфейса, появляются в автоматизированном пользовательском интерфейсе?

Немного предыстории...

Я разрабатываю приложение для автоматизации пользовательского интерфейса, которое случайным образом взаимодействует с элементами управления в нашем пользовательском интерфейсе. И приложение, и автоматизированный пользовательский интерфейс являются приложениями WPF. Я использую фреймворк доступности UI Automation. Иногда я получаю ElementNotAvailableException в своем приложении, которое я перехватываю и обрабатываю. При профилировании нашего пользовательского интерфейса с помощью ANTS 7 я заметил, что эти исключения появляются в куче мусора Gen 2. Новые экземпляры исключения совпадают с тем, сколько раз я поймал исключение в своем приложении.

Я просмотрел GCRoot с помощью WinDBG, страницы UIAutomation и не нашел четкого объяснения, почему в автоматизированном приложении появляется перехваченное исключение. Объекты не освобождаются при автоматизации пользовательского интерфейса и даже остаются, когда я закрываю приложение автоматизации.

Любые идеи?


person Raffledoocious    schedule 16.05.2011    source источник


Ответы (1)


Не зная точно, как это реализовано, мы можем знать, что для того, чтобы автоматизация пользовательского интерфейса делала то, что она должна делать:

  • приборостроение и
  • межпроцессного взаимодействия

Инструментальная часть состоит из инфраструктуры, которая буквально скомпилирована во все классы UI-фреймворка или добавлена ​​в фреймворк, если хотите. Он «заражает» хост-приложение и запускает внутри него мини-приложение.

Часть межпроцессного взаимодействия необходима для передачи неграфической информации между клиентом и хостом, такой как фактическое содержимое текстового поля. Это звучит просто, но буквально вызывает внедрение и обмен типами и значениями между двумя процессами.

Теперь, когда вы объединяете эти две вещи, исключение может быть обменено как часть межпроцессного взаимодействия, и это исключение может храниться как ссылка мини-приложением, которое является инфраструктурой автоматизации, и у вас есть спекулятивное объяснение того, как оно может произойти.

В вашем случае, если вы достаточно любопытны или достаточно мотивированы (возможно, из-за ошибки), вы можете продолжить изучение этой проблемы с помощью различных инструментов. У вас есть отладчик, ILSpy, эксперименты с черным ящиком, инструменты для кучи и т. д. Вам решать, как далеко вам нужно зайти.

person Rick Sladkey    schedule 16.05.2011
comment
Спасибо за ответ. Я подозревал, что что-то связано со связью между приложением автоматизации и пользовательским интерфейсом, из-за чего исключение появляется в пользовательском интерфейсе, который автоматизируется не удаленным. Я буду смотреть дальше с некоторыми другими инструментами отладки. - person Raffledoocious; 17.05.2011