我正在抨击我。
我正在为测试血液的机器编写一个串行应用程序。它以\r\n
终止的行基础发送信息。
问题在于,每次运行机器时都会错过一些线路,或者重复它们。我停下来重新开始,然后数据很好。
我正在使用DataReceived事件:
try
{
this.the = thePort.ReadLine();
}
catch (TimeoutException ex) {}
我完全感到困惑的是,为什么有时它会错过第一行,即S1表示通信已经开始,同时它会在此之后复制数据。
我可以通过将每行读取附加到文本框来看到这一点。
答案 0 :(得分:3)
由于你每次都覆盖了这个,你就会遇到竞争状态。这些事件会稍微不按顺序发射,也可能太靠近,以免您的应用程序应对。考虑使用一种线程安全的方法来处理数据,例如将其添加到缓冲区或StringBuilder中,并在其周围提供一些并发保护。