UI 自动化线程处理问题

更新:2007 年 11 月

由于 Microsoft UI 自动化使用 Windows 消息的方式的问题,当客户端应用程序试图在 UI 线程上与自己的 UI 交互时,可能会发生冲突。这些冲突可能会导致运行速度非常慢,甚至导致应用程序停止响应。

如果客户端应用程序要与桌面上的所有元素(包括它自己的 UI)交互,则应当在一个单独的线程上完成所有的 UI 自动化调用。这包括查找元素(例如,通过使用 TreeWalkerFindAll 方法)和使用控件模式。

可以在 UI 自动化事件处理程序中安全地调用 UI 自动化,因为该事件处理程序始终在非 UI 线程上调用。但是,如果订阅的事件源自客户端应用程序的 UI,则您必须在非 UI 线程上调用 AddAutomationEventHandler 或相关方法。需要在同一个线程上移除事件处理程序。