次の方法で共有


UI オートメーションのスレッド処理に関する問題

このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージド UI オートメーション クラスを使用する .NET Framework 開発者を対象としています。 UI オートメーションの最新情報については、「Windows Automation API: UI オートメーション 」を参照してください。

Microsoft UI オートメーションが Windows メッセージを使用する方法により、クライアント アプリケーションが UI スレッド上で独自の UI を操作しようとしたときに競合が発生する可能性があります。 これらの競合により、パフォーマンスが非常に低下したり、アプリケーションの応答が停止したりする可能性があります。

クライアント アプリケーションがデスクトップ上のすべての要素 (独自の UI を含む) と対話することを目的としている場合は、すべての UI オートメーション呼び出しを個別のスレッドで行う必要があります。 これには、要素の検索 ( TreeWalkerFindAll メソッドの使用など) やコントロール パターンの使用が含まれます。

イベント ハンドラーは常に UI 以外のスレッドで呼び出されるため、UI オートメーション イベント ハンドラー内で UI オートメーション呼び出しを行うと安全です。 ただし、クライアント アプリケーションの UI から発生する可能性のあるイベントをサブスクライブする場合は、非 UI スレッドで AddAutomationEventHandlerまたは関連するメソッドを呼び出す必要があります。 同じスレッドのイベント ハンドラーを削除します。