2012-06-22 157 views
0

我正在設計一個客戶端測試腳本生成應用程序。應用程序查找提供程序中的每個自動化元素,並向提供程序中的每個自動化元素註冊一個偵聽程序。每當用戶與提供者的UI進行交互時,自動化元素就會觸發記錄在我的應用程序中的事件。 現在,主窗體上的按鈕會觸發事件,但子窗體中的按鈕不會觸發事件。我意識到子窗體按鈕在提供者的代碼中沒有訂閱者。所以我的問題是,如果至少有一個訂閱者,.NET按鈕是否只觸發事件?只有當至少有一個用戶時,.NET按鈕纔會觸發事件嗎?

+1

事件不能被解僱,除非有訂閱者(EventHandler將爲空,所以不能被調用)。你的測試腳本的聽衆不要算作訂閱者嗎? –

+0

我很抱歉問,但是當您的應用程序迭代自動化元素的提供者時,是否考慮到了該提供者的子元素或元素的子元素? –

+0

我同意Tim S.在哪裏;我原以爲添加一個監聽器就足以讓對象的事件至少有一個用戶。 –

回答

3

這有點像問「如果樹落在森林裏,沒有人聽到它,它會發出聲音嗎?」如果你去那裏找,有人聽到它。

當處理程序連接到.NET事件時,會創建一個集合對象並向其添加委託。當事件發生時,框架會檢查這個集合的存在。當存在時,它的元素被枚舉和調用,否則事件調度會提前終止。

「[D] o如果至少有一個用戶,.NET按鈕只會觸發事件?」

如果通過「火災事件」,您的意思是「調用代表來呼叫事件處理程序」,那麼顯然這隻有在代表代表時纔會發生。顯然,如果沒有任何,那麼他們不能被調用。在「框架看起來爲委託人打電話時,沒有任何」,那麼事件沒有火在沒有處理程序。

+0

是,但淨按鈕元素尋找在單獨的客戶代表應用程序? – user1352399

+0

單獨的應用程序是一個客戶端的方式是什麼? .net遠程處理是我想象的唯一方法,可以將事件處理程序綁定到另一個AppDomain中的某個事件處理程序,並且遠程處理長時間不是推薦的分佈式應用程序技術。 –

相關問題