0

クライアント側のテスト スクリプト生成アプリケーションを設計しています。アプリケーションはプロバイダー内のすべての自動化要素を検出し、プロバイダー内の各自動化要素にリスナーを登録します。ユーザーがプロバイダーの UI を操作するたびに、自動化要素がイベントを発生させ、アプリケーションに記録されます。現在、メイン フォームのボタンはイベントを発生させますが、サブフォームのボタンはイベントを発生させません。プロバイダーのコードに、サブフォーム ボタンのサブスクライバーが含まれていないことに気付きました。私の質問は、.NET ボタンは、少なくとも 1 人のサブスクライバーがいる場合にのみイベントを発生させるのですか?

4

1 に答える 1

3

これは、「森で木が倒れ、誰も聞いていない場合、音はしますか?」と尋ねるようなものです。調べに行けば誰か聞いてくれる。

ハンドラーが .NET イベントにアタッチされると、コレクション オブジェクトが作成され、それにデリゲートが追加されます。イベントが発生すると、フレームワークはこのコレクションの存在をチェックします。存在する場合、その要素が列挙されて呼び出されます。それ以外の場合、イベントのディスパッチは早期に終了します。

「[D]o .NET ボタンは、少なくとも 1 人のサブスクライバーがいる場合にのみイベントを発生させますか?」

「イベントを発生させる」とは、「デリゲートを呼び出してイベント ハンドラーを呼び出す」ことを意味する場合、明らかに、これデリゲートが存在する場合にのみ発生します。明らかに、何もない場合、それらを呼び出すことはできません。「フレームワークはデリゲートがない場合に呼び出すデリゲートを探しますか」という意味で、イベントハンドラーが存在しない場合に発生します。

于 2012-06-22T00:21:56.160 に答える