只是为了解释一下,我有一个开发板,根据命令,射出 4 个字符(字节)。我用来调试的终端程序(RealTerm)看到所有 4 个字节。我现在开始编写桌面软件,我的程序只关注发送的 4 个字节中的 1 个。澄清一下,我不知道 4 个字节中的哪一个(第一个、最后一个、中间两个),但我可以确定它是否真的有必要。
起初我认为 SerialPort.DataReceived 事件会为接收到的每个字节触发。这不是真的,我不知道是什么导致它触发,但它不是接收单个字节。
所以我尝试遍历 SerialPort.BytesToRead,但这也只获取第一个字节,即使它识别出有 3 个字节要读取(为什么不是 4 个??)
在它到达端口的确切时间接收这些数据对我来说并不重要,但显然我不想丢失 3/4 的数据。但是它不会总是 4 个字节,这就是它现在所做的。我只想获取所有准备好读取的字节。
事件处理程序:
private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
while (comPort.BytesToRead > 0)
{
RxString = comPort.ReadExisting();
RxByte = comPort.ReadByte();
byte[] myByte = new byte[6];
for (int i = 0; i < 6; i++)
{
myByte[i] = 0000000;
}
comPort.Read(myByte, 0, comPort.BytesToRead);
for (int i=0;i<6;i++)
{
if (myByte[i] != null)
{
thisBytes.Add(myByte[i]);
}
}
RxString = RxByte + "";
try
{
this.Invoke(new EventHandler(dealWithByte));
}
catch
{
}
}
}
private void dealWithByte(object sender, EventArgs e)
{
foreach (byte item in thisBytes)
{
RxByte = Convert.ToInt16(item);
string binary = Convert.ToString(RxByte, 2).PadLeft(8, '0');
//processTime(binary);
}
}