2

背景をちょっと…

UI のコントロールとランダムにやり取りする UI 自動化アプリを開発しています。自動化されるアプリと UI はどちらも WPF アプリケーションです。UI オートメーション アクセシビリティ フレームワークを使用しています。時折、キャッチして処理するアプリで ElementNotAvailableException が発生します。ANTS 7 を使用して UI をプロファイリングしているときに、これらの例外が Gen 2 ガベージ ヒープに表示されていることに気付きました。例外の新しいインスタンスは、アプリで例外をキャッチした回数と一致します。

WinDBG を使用した GCRoot と UIAutomation ページを調べましたが、自動化されているアプリでキャッチされた例外が表示される理由について明確な説明が見つかりませんでした。UI が自動化されているときにオブジェクトが解放されず、自動化アプリを閉じてもオブジェクトが残ります。

何か案は?

4

1 に答える 1

1

それがどのように実装されているかを正確に知らなくても、UI オートメーションが何をする必要があるかを知ることができます。

  • 計装、および
  • プロセス間通信

インストルメンテーション部分は、UI フレームワーク内のすべてのクラスに文字通りコンパイルされるか、必要に応じてフックされるフレームワークに追加されるインフラストラクチャで構成されます。ホストアプリケーションに「感染」し、その中でミニアプリケーションを実行します。

プロセス間通信部分は、テキスト ボックスの実際の内容など、クライアントとホストの間で非グラフィカルな情報を渡すために必要です。これは単純に聞こえますが、2 つのプロセス間で型と値の注入と交換を文字通り呼び出します。

これら 2 つのことを組み合わせると、プロセス間通信の一部として例外を交換することができ、その例外を自動化フレームワークであるミニ アプリケーションによって参照として保持することができます。

あなたの場合、十分に好奇心が強い場合、または十分に動機付けられている場合 (おそらくバグによって)、さまざまなツールを使用してこの問題を掘り下げ続けることができます。デバッガー、ILSpy、ブラックボックス実験、ヒープ ツールなどがあります。どこまで進めるかはあなた次第です。

于 2011-05-16T22:11:26.063 に答える