注释
本文档适用于想要使用 System.Windows.Automation 命名空间中定义的托管 UI 自动化类的 .NET Framework 开发人员。 有关 UI 自动化的最新信息,请参阅 Windows 自动化 API:UI 自动化。
本主题介绍 UI 自动化客户端如何使用 Microsoft UI 自动化事件。
UI 自动化允许客户端订阅感兴趣的事件。 此功能通过无需持续轮询系统中的所有 UI 元素来查看任何信息、结构或状态是否已更改,从而提高性能。
由于能够仅在定义的范围内侦听事件,效率得到了提高。 例如,客户端可以侦听树中所有 UI 自动化元素或仅侦听一个元素及其子代上的焦点更改事件。
注释
不要假定所有可能的事件都由Microsoft UI 自动化提供程序引发。 例如,并非所有属性更改都会导致 Windows 窗体和 Win32 控件的标准代理提供程序引发事件。
有关 UI 自动化事件的更广泛视图,请参阅 UI 自动化事件概述。
订阅事件
客户端应用程序使用以下方法之一注册事件处理程序来订阅特定类型的事件。
在调用该方法之前,必须创建一个委托方法来处理事件。 如果愿意,可以在单个方法中处理不同类型的事件,并在对表中某个方法的多个调用中传递此方法。 例如,可以设置单个AutomationEventHandler以根据EventId区别对待不同的事件。
注释
若要处理窗口关闭的事件,请将传递给事件处理程序的参数类型强制转换为 WindowClosedEventArgs。 由于窗口的 Microsoft UI 自动化元素不再有效,因此不能使用sender
参数来检索信息;请改用GetRuntimeId。
谨慎
如果应用程序可能从自己的 UI 接收事件,请不要使用应用程序的 UI 线程订阅事件或取消订阅。 这样做可能会导致不可预知的行为。 有关详细信息,请参阅 UI 自动化线程问题。
在关闭时,或者当 UI 自动化事件不再对应用程序感兴趣时,UI 自动化客户端应调用以下方法之一。
方法 | DESCRIPTION |
---|---|
RemoveAutomationEventHandler | 通过使用 AddAutomationEventHandler 取消注册已注册的事件处理程序。 |
RemoveAutomationFocusChangedEventHandler | 通过使用 AddAutomationFocusChangedEventHandler 取消注册已注册的事件处理程序。 |
RemoveAutomationPropertyChangedEventHandler | 通过使用 AddAutomationPropertyChangedEventHandler 取消注册已注册的事件处理程序。 |
RemoveAllEventHandlers | 注销所有已注册的事件处理程序。 |
有关示例代码,请参阅 “订阅 UI 自动化事件”。