UI 自動化執行緒問題

注意

本文件適用對象為 .NET Framework 開發人員,其想要使用 System.Windows.Automation 命名空間中定義的受控 UI 自動化類別。 如需 UI 自動化的最新資訊,請參閱 Windows 自動化 API:UI 自動化

由於 Microsoft UI 自動化使用 Windows 訊息的方式,當用戶端應用程式嘗試在 UI 執行緒上與其自己的 UI 互動時,就會發生衝突。 這些衝突可能會導致效能變得非常緩慢,甚至會讓應用程式停止回應。

如果您的用戶端應用程式預定要與桌面上的所有元素互動,包括自己的 UI,您應該在不同執行緒上進行所有 UI 自動化呼叫。 其中包括尋找項目 (例如,藉由使用 TreeWalkerFindAll 方法) 和使用控制項模式。

因為一律在非 UI 執行緒上呼叫事件處理常式,所以在 UI 自動化事件處理常式內,可以安全地進行 UI 自動化呼叫。 但是,在訂閱可能來自用戶端應用程式 UI 的事件時,您必須在非 UI 執行緒上對 AddAutomationEventHandler 或相關方法進行呼叫。 在相同執行緒上移除事件處理常式。