线程安全的.NET平台串口通信程序设计研究
2012-10-13彭伟
湖北工业大学学报 2012年2期
关键词:方法
彭 伟
(武汉城市职业学院电子信息工程学院,湖北武汉430064)
RS-232串行端口通信技术大量应用于工业控制系统,Microsoft在其.NET Framework加入了串行端口类Serial Port,以支持 Windo ws软件界面与外部设备之间的串口通信,实现数据采集及管理控制.然而,当.NET程序开发人员在串口组件数据接收事件处理程序中将读取的数据直接显示到可视化UI组件时,系统却抛出线程异常,提示当前线程与可视化组件不在同一线程上运行.通过查阅MSDN技术手册可知,.NET串口通信组件与可视化显示组件虽然处于同一窗体,但串口数据接收事件却是在辅助线程上引发,它并非与窗体中其他可视化组件同处于主线程[1].
本文将分析研究.NET Framewor k所提供的Serial Port、delegate、Thread及 Background Worker类相关技术,研究解决.NET开发环境下串口通信程序中的线程安全问题,并与以PIC微控制器为核心的8通道A/D转换模块之间进行串口数据通信与图文显示测试.
1 .NET串行端口类相关技术
1.1 串行端口类简介
.NET的System.IO.Ports命名空间包含用于控制串行端口的类,最重要的类Serial Port为同步和事件驱动I/O提供框架,提供对串口针脚和中断状态的访问以及对串行驱动程序属性的访问.
1.2 串行端口类数据接收事件处理
,由于其处理程序在辅助线程上引发,故而在事件处理程序中无法直接访问UI组件.为刷新窗体中相关组件的数据显示,根据 MSDN技术手册可知,在Data Recived事件的辅助线程内必须用Invoke激发委托来访问UI组件,它将会在恰当的线程上执行这些操作,实现线程安全调用.
