-1

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

  • 空速、声纳、纬度、经度等。文本框中显示的值
  • 物体避让显示
  • 全球定位系统地图

我在主窗体中有一个按钮,单击它时,它将打开串行端口,用户控件应该读取数据并显示它们,但我不知道该怎么做。

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

4

1 回答 1

1

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

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

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

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

于 2012-08-02T10:34:50.720 回答