Подписка на события модель автоматизации пользовательского интерфейса
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.
Связанные темы
-
Основные понятия