正如之前的海报所暗示的那样,没有“正确”的方法可以做到这一点。根据项目的范围,您可以采用多种不同的方法。对于一般的 .NET 事件注册和处理过程,NI 有一个很好的例子:https ://decibel.ni.com/content/docs/DOC-9161
该示例代码是一个“定时器处理程序”(使用原生 .NET 定时器 API),并说明了如何注册事件并创建回调 VI。让我们修改它以实现您的目标。为此,我们必须以某种方式通过回调 VI 与程序的另一部分(包含我们要更新的数字指示器)进行通信。在应用程序的不同部分之间建立通信的选项:
- 全局变量
- 功能性全局变量
- 控制/指示器参考
- 结构化同步机制(即队列、通知器等)
- 消息系统(即通过本地环回、托管队列等的 UDP)
有很多很多的选择,这当然不是一个详尽的列表。每种方法都有优点和缺点,您的决定应该基于您正在编写的应用程序类型。请注意,有些风格比其他风格更好。我的偏好(在编写相当简单的应用程序时)是使用通知器之类的东西来进行单点数据更新。我的观点是,这提供了很好的灵活性/力量,你不会因为风格点而受到打击。
下面是 NI 示例程序的修改版本,它使用通知器将数据从回调 VI 传递到顶层 VI。当事件触发时,回调将一些数据推送到通知器上,以向顶级 VI 发出已用时间已过且事件已发生的信号。顶层 VI 等待通知并使用提供的数据更新数字指示器的值。
请注意,这是一个非常简单的示例。在这种情况下,我什至不必发回任何数据。我知道,如果通知程序没有超时,则事件已触发,并且随后可以在顶层增加我的计数器。但是,通知程序允许您灵活地将任意数据填充到通信管道中。因此,它可以告诉我“嘿!你的情况发生了!” 和“这是生成的一些数据”。
回调六
顶级 VI
如果你正在编写一个更大的应用程序,你的监控通知器的循环可以与其他代码并行运行。这样做可以让您拥有一种异步机制来监视事件的状态并将其显示在 GUI 上。这种方法允许您在不干扰应用程序的其余部分的情况下监视事件。