动态事件注册可完全控制LABVIEW产生的事件的类型和时间。动态事件可使事件仅在应用程序的某个部分发生,也可在应用程序运行时改变产生事件的VI或控件。使用动态注册,可在子VI中处理事件而不是仅在产生事件的VI中处理事件。
处理动态注册的事件主要包括以下4个步骤。
· 第1步:获取要处理的事件对象的VI服务器引用;
· 第2步:将VI服务器引用连接至“注册事件”函数以注册对象的事件;
· 第3步:将事件结构放在While循环中,处理对象事件直至出现终止条件为止;
· 第4步:通过取消注册事件函数以停止事件发生。
要动态注册对象事件,必须先获取该对象的VI服务器引用。可通过打开应用程序引用和打开VI引用函数来获取应用程序和VI的引用。要获取控件引用,可使用属性节点查询VI的控件,或右键单击该控件、从弹出的快捷菜单中选择“创建→引用”来创建控件引用常量。
使用注册事件函数可动态注册事件,注册事件函数位于函数选板的“编程→对话框与用户界面一事件”,拖动上下箭头可调整“注册事件”函数的大小以显示一个或多个事件源输入端。将应用程序、VI或控件引用连接到每一个事件源输入端,右键单击每一个输入端,从快捷菜单的“事件”中选择想要注册的事件。所能选择的事件取决于连接到事件源输入端的VI服务器引用类型。
“事件”快捷菜单上的事件与静态注册事件时在“编辑事件”对话框出现的事件相同。“注册事件”函数执行时,LABVIEW将对每个事件源输入引用句柄相关联的对象上的事件进行注册。一旦注册了事件,LABVIEW将按事件发生的顺序将事件放入队列,直到事件结构来处理这些事件。除非有另一对象在函数执行之前己经注册了事件,否则将不会产生事件。
动态事件接线端类似于移位寄存器,可右键单击事件结构并从弹出的快捷菜单中选择“显示动态事件接线端”来获取。左接线端接受事件注册引用句柄或事件注册引用句柄的簇;如果不连接内部的右接线端,右接线端的数据将与左接线端相同。但是,可通过“注册事件”函数将事件注册引用句柄或事件注册引用句柄的簇连接至内部的右接线端并动态地修改事件注册。
要停止产生事件,可将事件结构右侧的动态事件接线端连接至位于“注册事件”函数左上角的“事件注册引用句柄”输入端。“取消注册事件”函数位于函数选板的“编程→对话框与用户界面→事件”,其处于含有该事件结构的While循环外。“取消注册事件”函数执行时,
LABVIEW将把该事件注册引用句柄所指定的一切事件注册取消,销毁与该事件注册引用句柄相关的事件队列,同时放弃任何尚在队列中的事件。如果用户不取消注册事件,而包含事件结构的While循环执行结束后用户叉执行了可产生事件的操作,那么LABVIEW将无限地查询事件。如果事件已配置为将前面板锁定,则此时Ⅵ无响应。在这种情况下,LABVIEW将在Ⅵ空闲时销毁事件队列。