1

我在用这个敲我的头。

我正在为一台测试血液的机器编写一个串行应用程序。它以行为基础发送以 . 结尾的信息\r\n

问题是,每次我运行机器时,它都会丢失一些行,或者重复它们。我停止并重新启动,然后数据正常。

我使用 DataReceived 事件:

try
{
    this.the = thePort.ReadLine();
}
catch (TimeoutException ex) {}

我完全困惑为什么有时它会错过第一行,即 S1 表示通信已经开始,同时它会在此之后复制数据。

我可以通过将读取的每一行附加到文本框来看到这一点。

4

1 回答 1

3

由于您每次都覆盖 this.the ,因此您会遇到竞争状况。这些事件触发的顺序稍微有点乱或太靠近,以至于您的应用无法应对。考虑使用线程安全的方法来存储数据,例如将数据添加到缓冲区或带有一些并发保护的 StringBuilder。

于 2013-05-10T15:03:21.830 回答