Поделиться через


Подписка на события модель автоматизации пользовательского интерфейса

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

Эффективность также повышается благодаря возможности прослушивания событий только в заданной области. Например, клиент может прослушивать изменения выбора для элемента в списке, в самом списке или во всем диалоговом окне.

Примечание

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

 

Более широкое представление событий модель автоматизации пользовательского интерфейса см. в разделе Общие сведения о событиях модель автоматизации пользовательского интерфейса.

Примечание

Перед реализацией обработчика событий необходимо ознакомиться с проблемами потоков, описанными в разделе Основные сведения о проблемах с потоками.

 

В этом разделе содержатся следующие подразделы.

Регистрация обработчиков событий

Клиентские приложения подписываются на события определенного типа, регистрируя обработчик событий с помощью одного из следующих методов IUIAutomation .

Метод подписки Тип события Интерфейс обратного вызова
AddFocusChangedEventHandler Изменение фокуса IUIAutomationFocusChangedEventHandler
AddPropertyChangedEventHandler, AddPropertyChangedEventHandlerNativeArray Изменение свойства IUIAutomationPropertyChangedEventHandler
AddStructureChangedEventHandler Изменение структуры IUIAutomationStructureChangedEventHandler
AddNotificationEventHandler Уведомление IUIAutomationNotificationEventHandler
AddAutomationEventHandler Другие события IUIAutomationEventHandler

 

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

Когда клиент вызывает метод IUIAutomation::RemoveAllEventHandlers, модель автоматизации пользовательского интерфейса удаляет все обработчики событий из клиентского процесса.

Для получения и обработки событий реализуется объект обработки событий, предоставляющий интерфейс обратного вызова, и необходимо зарегистрировать объект, вызвав метод регистрации событий, например IUIAutomation::AddPropertyChangedEventHandler. Интерфейс обратного вызова имеет один метод; модель автоматизации пользовательского интерфейса вызывает этот метод при обработке события.

При завершении работы или когда модель автоматизации пользовательского интерфейса события больше не представляют интереса для приложения, модель автоматизации пользовательского интерфейса клиенты должны вызывать один или несколько следующих методов IUIAutomation.

Примечание

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

 

Метод Описание
RemoveAutomationEventHandler Отменяет регистрацию обработчика событий, зарегистрированного с помощью AddAutomationEventHandler.
RemoveFocusChangedEventHandler Отменяет регистрацию обработчика событий, зарегистрированного с помощью AddFocusChangedEventHandler.
RemovePropertyChangedEventHandler Отменяет регистрацию обработчика событий, зарегистрированного с помощью метода AddPropertyChangedEventHandler или AddPropertyChangedEventHandlerNativeArray.
RemoveStructureChangedEventHandler Отменяет регистрацию обработчика событий, зарегистрированного с помощью AddStructureChangedEventHandler.
RemoveNotificationEventHandler Отменяет регистрацию обработчика событий, зарегистрированного с помощью AddNotificationEventHandler.
RemoveAllEventHandlers Отменяет регистрацию всех зарегистрированных обработчиков событий.

 

Событие может быть доставлено обработчику событий после отмены подписки на обработчик, если событие получено одновременно с запросом на отмену подписки на событие. Рекомендуется следовать стандарту COM и избегать уничтожения объекта обработчика событий до тех пор, пока его число ссылок не достигнет нуля. Удаление обработчика событий сразу после отмены подписки на события может привести к нарушению доступа, если событие доставлено с опозданием.

Примеры

Примеры кода, демонстрирующие обработку событий модель автоматизации пользовательского интерфейса, см. в разделе How to Implement Event Handlers.

Основные понятия

Обзор событий автоматизации пользовательского интерфейса

Основные сведения о проблемах с потоками