.NET SerialPort类(C#)在旧系统上的行为是否不同?

时间:2014-11-09 16:15:55

标签: c# .net windows

我有一个相对较短的C#程序,它使用以下格式通过RS232端口提供数据:

'STX'标题'校验和''ETX'

'STX'data1'Checksum''ETX'

'STX'......'校验和''ETX'

'STX'dataN'Checksum''ETB'

接收端应该在收到ETX / ETB时回复ACK或NAK字节。

在Windows 7 64位的计算机上运行良好。

然而,在Win XP 32机器上启动程序时遇到了问题,因为我已经构建了程序来定位.NET 4.5版(显然不支持那个版本的Win XP)。

我将其更改为目标.NET版本4,现在程序启动就好了。但接收端不再响应ACK或NAK,只是第一次(在发送数据文件头时)。 我打印出控制台上的字节缓冲区,在ETX字节应该是的地方有一个向上箭头带有基础符号(↨),它告诉我它根本不会发送一个ETX。

有什么奇怪之处在于它在Windows 7机器上工作正常,并且第一个传输(标头)就像它应该的那样返回一个ACK,但是当第一个数据包被发送时,没有更多的回复...没有ACK或NAK。

1 个答案:

答案 0 :(得分:1)

如果有人遇到类似的问题;我的问题是我使用USB转串口转换器。它导致时间变得混乱。我要解决的问题是订阅SerialPort的{​​{1}}事件,然后使用DataReceived获取事件处理程序内的数据(这也会清除接收缓冲区) )。所以线程大致会这样做:

发送数据 - > 等待DataReceive触发 - >处理数据 - >重复。

请务必在等待循环中设置超时。