C#serialport.BytesToRead接收数据长度异常

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:串口被系统设计成独占方式是有原因的(独占通常的意思是就一个人进行读写,同时如果你要没事清缓冲区也请你自己一个人承担清缓冲区的责任)

说明缓冲区里的数据已经被另一个线程给读走了呗
不要两个线程同时读同一个端口
这问题你不是问过了吗