Visual studio上位机的接收真的很奇怪,我在代码中直接用serialport.Bytestoread串口读取的长度就是0。而我将serialport.Bytestoread赋值到一个整形中时,整形的值为40,但是后面再调用serialport.Bytestoread就为0了。这个问题已经困扰了我好几天了,有人可以给个tips吗?或者有没有人有chatGPT帮我问一下也行呀。
/*int receiveData = serialPort1.BytesToRead; //读取缓存区字节数目
textBox15.Text = Convert.ToString(receiveData);*/
byte[] rdata = null;
Thread.Sleep(100);
//if (serialPort1.BytesToRead < 20)
//return;
rdata = new byte[serialPort1.BytesToRead];
serialPort1.Read(rdata, 0, rdata.Length);
int i = 0;
foreach (byte member in rdata)
{
Readbuff[i] = (byte)member;
i++;
}
Thread.Sleep(100);
analysisdata();
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
Thread.Sleep(100);
代码不完整,我们不知道你在干啥
这代码里我只能说
serialPort1.DiscardInBuffer()你没事清缓冲区干嘛
没事写那么多Sleep干嘛
剩下就没的可说了,这只是一个点,这种片段代码我们并不知道你全局在干嘛
ps:串口被系统设计成独占方式是有原因的(独占通常的意思是就一个人进行读写,同时如果你要没事清缓冲区也请你自己一个人承担清缓冲区的责任)
说明缓冲区里的数据已经被另一个线程给读走了呗
不要两个线程同时读同一个端口
这问题你不是问过了吗