您好我正在使用串口编写应用程序以使用设备。我已经编写了代码,当我设置断点时它工作正常,但是当我用断点调试它时,预期的数据是逐个部分的。例如,当我放置断点并从端口读取时,正确的数据是“ali”,但是当我删除断点时,数据将是“a”,“li”。 这是我从端口写入和读取的代码片段:
fname1 = Encoding.Default.GetBytes("write1" + dataRow[0].ToString());
comport.Write(fname1,0,fname1.Length);
lname1 = Encoding.Default.GetBytes("write4" + dataRow[1].ToString());
comport.Write(lname1, 0, lname1.Length);
c3 = Encoding.Default.GetBytes("read" +0x1);
comport.Write(c3,0,c3.Length);
comport.Read(fname1, 0, fname1.Length);
string s = Encoding.Default.GetString(fname1);
MessageBox.Show(s);
我认为因为我有编码有一些时间浪费,这解释了我描述的断点的影响。
我的解决方案是将延迟连续两次读或写。我对么 ?如果是,我该如何实现呢?还有更好的方法吗?
答案 0 :(得分:1)
问题在于,当您调用comport.Read
时,会读取可读取的任何数据。整个消息很可能还没有到达串口。
如果您期望一定数量的字节,那么您可以使用如下的循环:
var bytesReceived= 0;
while(bytesReceived < fname1.Length)
{
bytesReceived +=
comport.Read(fname1, bytesReceived, fname1.Length - bytesReceived);
}
也可以使用SerialPort.ReadLine
读取一行,或使用SerialPort.ReadTo
读取某个字符串。
有关这些方法的详细信息,请参阅MSDN。