SerialPort和UserControl

时间:2012-08-02 10:06:16

标签: c# user-controls serial-port

我有一些UserControl程序需要从1个串口读取数据。我有一些程序包括:

  • Airspeed,Sonar,Latitude,Longtitude&等。文本框中显示的值
  • 对象规避显示
  • GPS地图

我在主窗体中有一个按钮,当它单击时,它将打开serialport并且usercontrol应该读取数据并显示它们,但我不知道该怎么做。

有人知道我的不同用户控件如何从1个串口读取数据?或者可能是一些我可以阅读的网站链接。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您有一个来源(串行端口)和许多消费者(您的用户控制)。然后你必须添加另一层间接。编写一个作为串口类所有者的类,并将其中的所有数据读入某种缓冲区(对DataReceived事件做出反应,将新数据放入List,Queue等)。这个缓冲区将从这个类中进行宣传,另外它还有一些自己的事件(DataReceived?)。您的所有消费者现在都可以收听此事件,并查看缓冲区以查找所需数据。

主要问题是从共享缓冲区中删除数据,因为它需要整个缓冲区或仅需要部分缓冲区,这取决于您的使用者。想想一个概念,每个消费者如何通知生产者它只能在缓冲区中工作,如果每个人都超出缓冲区的开头,让生产者减少缓冲区。但请注意,您还必须重新通知您的消费者,指数现已更改。

如果每个消费者通过每次接收某些数据创建自己的本地缓冲区,也可以避免增长的共享缓冲区的问题,在这种情况下,每个消费者都可以根据需要减少自己的缓冲区。

如果由于使整个应用程序的内存占用更小而需要第一种方法的复杂性,哪种策略更有意义取决于具体情况。