私はこれを理解し、主に私の結果を共有するために投稿することにずっと近づいています。
私が見ているのは、(同じウィンドウで)User32.FindWindowを数回呼び出すと、FindAllBuildCache()などのUIオートメーションコアメソッドの呼び出しが台無しになることです。
PInvoke FindWindow呼び出しから返されたハンドルを破棄する適切な方法があるかどうか誰かが知っていますか?
私はこれを理解し、主に私の結果を共有するために投稿することにずっと近づいています。
私が見ているのは、(同じウィンドウで)User32.FindWindowを数回呼び出すと、FindAllBuildCache()などのUIオートメーションコアメソッドの呼び出しが台無しになることです。
PInvoke FindWindow呼び出しから返されたハンドルを破棄する適切な方法があるかどうか誰かが知っていますか?
BrendanMcKless、
それを指摘してくれてありがとう。それは持っておくべき良い情報です。
これで、発生した問題は、AutomationClientと同時にUIAutomationCoreを使用したことが原因であると99%確信しています。私が使用しているCoreは、tlbimpビルドステップを使用して、CoreDLLからマネージアセンブリを作成します。Coreを使用するとパフォーマンスが向上し、IUIAutomationLegacyIAccessiblePatternというパターンも取得します。これにより、InfragisticsUltragridからセルの内容を取得できます。昨日、AutomationClientを使用しなくても、アセンブリがロードされるとすぐにテストで問題が発生し始めることに気付きました。
AutomationClientインポートを使用してクラスのインスタンスを作成すると、出力ウィンドウに次のように表示されます。
Loaded UIAutomationClientsideProviders.dll
Loaded Accessibility.dll
IUIAutomationLegacyIAccessiblePatternを使用しているため、Accessibility.dllに問題がある可能性がありますが、そのDLLはUIAutomationClientsideProviders.dllの依存関係として読み込まれています。
解決策が正しくないことが判明した場合は、投稿を更新します(100%確実になる前に、かなりの量のやり直しが必要です)。
しばらくして追加:
問題は間違いなく、マネージドクライアント側のUIオートメーションのものと一緒にUIオートメーションコアを使用することでした。なんて痛い!