注释
本文档适用于想要使用 System.Windows.Automation 命名空间中定义的托管 UI 自动化类的 .NET Framework 开发人员。 有关 UI 自动化的最新信息,请参阅 Windows 自动化 API:UI 自动化。
由于Microsoft UI 自动化使用 Windows 消息的方式,当客户端应用程序尝试与 UI 线程上的自己的 UI 交互时,可能会发生冲突。 这些冲突可能会导致性能非常慢,甚至会导致应用程序停止响应。
如果客户端应用程序旨在与桌面上的所有元素(包括其自己的 UI)进行交互,则应在单独的线程上调用所有 UI 自动化。 这包括查找元素(例如,通过使用 TreeWalker 或 FindAll 方法),以及使用控件模式。
在 UI 自动化事件处理程序中进行 UI 自动化调用是安全的,因为事件处理程序始终在非 UI 线程上调用。 但是,当订阅可能来源于客户端应用程序的 UI 的事件时,必须在非 UI 线程上调用 AddAutomationEventHandler 或相关方法。 删除当前线程上的事件处理代码。