我刚刚启动了一个项目来控制通过RS-232串口通信的工业仪器。波特率限制在9600 ......相当慢。
该仪器可以两种模式运行 - 轮询,PC发送请求,仪器回复数据;或连续的,仪器发送恒定的流数据。数据需要从ASCII转换为浮点数并绘制。
我对使用SerialPort DataRecieved事件的示例程序进行的初步实验并不吉利......在使用仪器连续传输的情况下,很容易让用户界面变得无响应。
我已经查看过产生单独任务的其他示例项目等,但它们看起来都很复杂,我想知道是否有更好的方法,尤其是最新.NET的功能运行时(我写这篇文章时为4.5.1)。
像Async API这样的东西,Dataflow对于这种类型的应用程序看起来特别有前途。我已经开始尝试使用Async API接收数据。代码非常简单,但是在使其变得健壮(异常处理)方面存在一些问题。
最简单的方法似乎是使用异步方法将数据解析为某种线程安全队列,这会将事件引发到UI以进行绘图。但我仍在研究细节。
寻找有关解决此问题的最佳方法的建议。
答案 0 :(得分:1)
由于您没有太多的处理要做,我建议使用基于TPL-Dataflow构建的Rx(Reactive)框架。 Rx在处理数据流方面为您提供了更大的灵活性(将其视为事件流的Linq),而DataFlow更适合于设置数据管道,您希望对并发性进行精细控制。
最近遇到类似的问题,连接GPS阅读器,我会建议以下架构......
有关详细信息,我强烈推荐此文档...... http://go.microsoft.com/fwlink/?LinkId=208528