動態(tài)事件注冊可完全控制LABVIEW產(chǎn)生的事件的類型和時間。動態(tài)事件可使事件僅在應(yīng)用程序的某個部分發(fā)生,也可在應(yīng)用程序運行時改變產(chǎn)生事件的VI或控件。使用動態(tài)注冊,可在子VI中處理事件而不是僅在產(chǎn)生事件的VI中處理事件。
處理動態(tài)注冊的事件主要包括以下4個步驟。
· 第1步:獲取要處理的事件對象的VI服務(wù)器引用;
· 第2步:將VI服務(wù)器引用連接至“注冊事件”函數(shù)以注冊對象的事件;
· 第3步:將事件結(jié)構(gòu)放在While循環(huán)中,處理對象事件直至出現(xiàn)終止條件為止;
· 第4步:通過取消注冊事件函數(shù)以停止事件發(fā)生。
要動態(tài)注冊對象事件,必須先獲取該對象的VI服務(wù)器引用??赏ㄟ^打開應(yīng)用程序引用和打開VI引用函數(shù)來獲取應(yīng)用程序和VI的引用。要獲取控件引用,可使用屬性節(jié)點查詢VI的控件,或右鍵單擊該控件、從彈出的快捷菜單中選擇“創(chuàng)建→引用”來創(chuàng)建控件引用常量。
使用注冊事件函數(shù)可動態(tài)注冊事件,注冊事件函數(shù)位于函數(shù)選板的“編程→對話框與用戶界面一事件”,拖動上下箭頭可調(diào)整“注冊事件”函數(shù)的大小以顯示一個或多個事件源輸入端。將應(yīng)用程序、VI或控件引用連接到每一個事件源輸入端,右鍵單擊每一個輸入端,從快捷菜單的“事件”中選擇想要注冊的事件。所能選擇的事件取決于連接到事件源輸入端的VI服務(wù)器引用類型。
“事件”快捷菜單上的事件與靜態(tài)注冊事件時在“編輯事件”對話框出現(xiàn)的事件相同。“注冊事件”函數(shù)執(zhí)行時,LABVIEW將對每個事件源輸入引用句柄相關(guān)聯(lián)的對象上的事件進(jìn)行注冊。一旦注冊了事件,LABVIEW將按事件發(fā)生的順序?qū)⑹录湃腙犃?,直到事件結(jié)構(gòu)來處理這些事件。除非有另一對象在函數(shù)執(zhí)行之前己經(jīng)注冊了事件,否則將不會產(chǎn)生事件。
動態(tài)事件接線端類似于移位寄存器,可右鍵單擊事件結(jié)構(gòu)并從彈出的快捷菜單中選擇“顯示動態(tài)事件接線端”來獲取。左接線端接受事件注冊引用句柄或事件注冊引用句柄的簇;如果不連接內(nèi)部的右接線端,右接線端的數(shù)據(jù)將與左接線端相同。但是,可通過“注冊事件”函數(shù)將事件注冊引用句柄或事件注冊引用句柄的簇連接至內(nèi)部的右接線端并動態(tài)地修改事件注冊。
要停止產(chǎn)生事件,可將事件結(jié)構(gòu)右側(cè)的動態(tài)事件接線端連接至位于“注冊事件”函數(shù)左上角的“事件注冊引用句柄”輸入端。“取消注冊事件”函數(shù)位于函數(shù)選板的“編程→對話框與用戶界面→事件”,其處于含有該事件結(jié)構(gòu)的While循環(huán)外。“取消注冊事件”函數(shù)執(zhí)行時,
LABVIEW將把該事件注冊引用句柄所指定的一切事件注冊取消,銷毀與該事件注冊引用句柄相關(guān)的事件隊列,同時放棄任何尚在隊列中的事件。如果用戶不取消注冊事件,而包含事件結(jié)構(gòu)的While循環(huán)執(zhí)行結(jié)束后用戶叉執(zhí)行了可產(chǎn)生事件的操作,那么LABVIEW將無限地查詢事件。如果事件已配置為將前面板鎖定,則此時Ⅵ無響應(yīng)。在這種情況下,LABVIEW將在Ⅵ空閑時銷毀事件隊列。