LabWindows/CVI 对于.NET的委托和事件的支持



主要软件: LabWindows/CVI Development Systems>>LabWindows/CVI Full Development System
主要软件版本: 2009 SP1
主要软件修正版本: N/A
次要软件: Measurement Studio>>Measurement Studio for .NET Support

问题:

在LabWindows/CVI中怎样使用.NET中类的事件,这样的类的事件能否与LabWindows/CVI的事件建立连接?



解答:
首先这个应用是完全可以的。但是这个特性在CVI8.5后才支持得较好,CVI8.0之前虽然可以做但是将委托类视为一个单独类库的方法会复杂的多
http://digital.ni.com/public.nsf/allkb/346E949235C54BA086257234005607E0?OpenDocument
背景
目前.NET语言和技术在各个平台越来越多地被使用到,更多的仪器也发布一个完整的.NET组件作为仪器驱动,并且将很多的仪器特性和数据利用仪器类的事件传递给开发平台,这时Visual Studio的确顺理成章会成为最理想的开发平台。
但是我们的LabVIEW和LabWindows/CVI在测试测量应用中数据表达和丰富驱动的优势,如果同样能结合对.NET的完美支持,依然可以推荐为广大测试软件工程师的首选平台。LabVIEW现在对.NET有很好的支持,而LabWindows/CVI在这方面文档很少,因此本文就在此对CVI中使用.NET类的委托和事件做了摸索。
知识
简单来说:委托和事件是两个概念,在.NET中又相互关联。具体参考MSDN
http://msdn.microsoft.com/zh-cn/library/17sde2xt%28v=VS.80%29.aspx
委托是一种类的引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,与委托的签名(由返回类型和参数组成)匹配的任何方法都可以分配给该委托。其实.NET的委托类似于C语言的函数指针,区别在于.NET委托是类型安全的。
事件是类在发生其关注的事情时用来提供通知的一种方式。例如,封装用户界面控件的类可以定义一个在用户单击该控件时发生的事件。事件使用委托来为触发时将调用的方法提供类型安全的封装。
了解了以上的一些背景就可以在CVI中做个实际应用验证了。
实现
我们以System.Timers.Timer类为例,在该类中封装了一个事件Elapsed。
在C#的实现为通过委托注册一个事件(红色),然后编写事件处理函数(蓝色)。如果一个仪器的驱动以事件的方式提供某些返回数据,可以用这种方式实现。那么在CVI中又如何实现对应的功能?
首先在利用CVI的.NET Controller导入组件时必须将System.Timers命名空间下的Timer和EventHandler勾选上,因为后者其实就是委托类。
然后编写代码,分别创建Timer和ElaspedEvent这两个对象,在创建ElaspedEvent的同时注册了回调函数TimerCallback,利用Timer中的Add_Elasped函数将两者建立连接,相当于C# 中的+=运算符将委托和事件建立了连接(红色)。这样.NET类中的事件也就可以对应到CVI中的一个具体的回调函数了,在该回调函数中实现相应的代码即可(蓝色)。
在CVI中运行这段代码,得到了和在VS中一样的效果。
总结
有了以上的验证,证明CVI对于.NET组件的事件同样有完美的支持,因此即使以后拿到的仪器驱动或者程序模块是一个独立的.NET组件,我们也同样可以在LabWindows/CVI中使用它。


相关链接:

附件:





报告日期: 04/09/2013
最近更新: 04/09/2013
文档编号: 68804CUY