可创建和命名自定义事件,即用户事件,用于传送自定义数据。用户事件允许一个应用程序的不同部分进行异步通信。用户界面事件要求用户直接与前面板对象交互,与用户界面事件不同,用户事件允许创建响应对象编程改动的应用程序。可以在同一事件结构中处理用户界面事件和通过编程产生的用户事件。

使用的对象

使用下列程序框图对象创建用户事件。
  • 创建用户事件—创建用户事件
  • —注册事件
  • —事件结构
  • — 产生用户事件
  • — 取消注册事件
  • —销毁用户事件
  • 操作步骤

    创建下列程序框图,生成通过编程传递自定义数据的用户事件。


    包含上述函数的LabVIEW G代码的截图。

    下面列出了上述程序框图的要点。

  • 1—如需定义用户事件,可连线程序框图对象至“创建用户事件”函数。“创建用户事件”函数的输入是单个元素或簇,其名称为用户事件的名称,其数据类型定义了事件的数据类型。同时,LabVIEW使用自带标签识别用户事件的数据,故应为输入数据,或输入数据的每个元素使用说明性自带标签。必须为用户事件的输入数据提供标签,以便显示在事件结构的事件数据节点中。在上面的程序框图中,用户事件的名称为My User Event,事件数据项的名称为string
  • 2—“创建用户事件”函数的用户事件输出输出接线端是一个严格类型的引用,该引用传送了用户事件的名称和数据类型。注册事件和生成用户事件时,使用该引用句柄作为事件名称和数据类型的引用。
  • 3— 使用“注册事件”函数可动态注册用户事件。可同时将用户事件和用户界面事件连接到“注册事件”函数。
  • 4— 将“注册事件”函数的事件注册引用句柄输出接线端连接到该事件结构左侧的动态事件接线端。如需显示动态事件接线端,可右键单击事件结构并选择显示动态事件接线端。用户事件数据项出现在事件结构左边框上的事件数据节点中。
  • 5—纵向调整节点大小,可添加更多数据项至事件数据节点。使用事件数据节点访问与特定事件关联的任何事件数据元素
  • 6— 通过编辑事件对话框来配置事件结构中的一个分支以处理该事件。用户事件的名称将出现该对话框中事件源部分的动态子标题下。
  • 7—使用产生用户事件函数,可通过用于处理该事件的事件结构,将用户事件及相关数据传送到应用程序的其他部分。“产生用户事件”函数接收一个用户事件引用句柄和事件数据值。数据值必须与用户事件的数据类型匹配。
    注: 如用户事件未注册,则“产生用户事件”函数将无效。如果用户事件已注册但没有事件结构等待该事件,那么LabVIEW将把该用户事件和数据放入队列,直到有事件结构来处理该事件。
  • 8— 使用“取消注册事件”函数和“销毁用户事件”函数,释放相关事件和用户事件引用。当顶层VI结束运行时,LabVIEW将自动取消所有事件注册并销毁已有的用户事件。为节省内存资源,建议取消注册并销毁用户事件,尤其是在长时间运行的应用程序里。
  • 说明和建议

    • 用户事件不可静态注册。
    • 通过单独的“注册事件”函数可多次注册同样的用户事件。在这种情况下,每当“产生用户事件”函数执行时,每个与事件注册引用句柄相关的队列将收到用户事件相关事件数据的副本。
    • 作为一种通知事件,用户事件与用户界面事件或其他用户事件共享同样的事件结构分支。
    • 如要模拟用户与前面板的交互,可创建与已有用户界面事件具有相同的名称和数据类型等事件数据项的用户事件。例如,使用具有两个名为OldValNewVal布尔字段的簇,可创建一个名为MyValChg的用户事件。这两个布尔型字段同时也是值改变用户界面事件与布尔型控件相连的事件数据项。该模拟的MyValChg用户事件以及真正的“布尔值改变”事件可置于同一个事件结构内。如果“创建用户事件”函数产生该用户事件或用户对该控件的值进行更改,那么事件结构将执行该事件分支。

    范例

    关于动态注册事件的范例,见labview\examples\Dialog and User Interface\Events\Events.lvproj

    关于使用用户事件的范例,见labview\examples\Dialog and User Interface\Events目录下的User Event Generation VI。