客户端的 UI 自动化事件

注意

本文档适用于想要使用 System.Windows.Automation 命名空间中定义的托管 UI 自动化类的 .NET Framework 开发人员。 有关 UI 自动化的最新信息,请参阅 Windows 自动化 API:UI 自动化

本主题介绍 UI 自动化客户端如何使用 Microsoft UI 自动化事件。

UI 自动化允许客户端订阅关注的事件。 有了此功能,将不再需要频繁地轮询系统中的所有 UI 元素来确定是否更改了任何信息、结构或状态,从而提高了性能。

由于能够只侦听定义范围内的事件,因此效率也得到了提高。 例如,客户端可以在树中的所有 UI 自动化元素上侦听焦点更改事件,也可以只在一个元素及其后代上侦听。

注意

不要假定所有可能的事件都由 Microsoft UI 自动化提供程序引发。 例如,并非所有属性更改都会导致 Windows 窗体和 Win32 控件的标准代理提供程序引发事件。

如要了解更多 UI 自动化事件,请参阅 UI 自动化事件概述

订阅事件

客户端应用程序通过使用以下方法之一注册事件处理程序,从而订阅特定种类的事件。

方法 事件类型 事件参数类型 委托类型
AddAutomationFocusChangedEventHandler 焦点更改 AutomationFocusChangedEventArgs AutomationFocusChangedEventHandler
AddAutomationPropertyChangedEventHandler 属性更改 AutomationPropertyChangedEventArgs AutomationPropertyChangedEventHandler
AddStructureChangedEventHandler 结构更改 StructureChangedEventArgs StructureChangedEventHandler
AddAutomationEventHandler 所有其他事件(由 AutomationEvent 标识) AutomationEventArgsWindowClosedEventArgs AutomationEventHandler

在调用方法之前,必须创建一个委托方法来处理事件。 如果愿意,你可以在单一方法中处理不同种类的事件,并在多个调用中将此方法传递到表中的某个方法。 例如,可以将单一 AutomationEventHandler 设置为根据 EventId 以不同的方式处理各种事件。

注意

若要处理窗口关闭事件,请将传递到事件处理程序的参数类型转换为 WindowClosedEventArgs。 由于窗口的 UI 自动化元素不再有效,因此无法使用 sender 参数来检索信息;请改用 GetRuntimeId

注意

如果应用程序可能从自己的 UI 中接收事件,请不要使用应用程序的 UI 线程来订阅或取消订阅事件。 这样做可能会导致不可预知的行为。 有关更多信息,请参见 UI Automation Threading Issues

关闭时,或者当应用程序不再对 UI 自动化事件感兴趣时,UI 自动化客户端应调用以下方法之一。

方法 说明
RemoveAutomationEventHandler 通过使用 AddAutomationEventHandler 取消注册已注册的事件处理程序。
RemoveAutomationFocusChangedEventHandler 通过使用 AddAutomationFocusChangedEventHandler 取消注册已注册的事件处理程序。
RemoveAutomationPropertyChangedEventHandler 通过使用 AddAutomationPropertyChangedEventHandler 取消注册已注册的事件处理程序。
RemoveAllEventHandlers 取消注册所有已注册的事件处理程序。

有关示例代码,请参阅订阅 UI 自动化事件

请参阅