在没有SLEEP()的comPort_DataReceived之后无法正确读取数据

时间:2014-01-25 10:18:59

标签: c# serial-port

我正在进行一次串口控制测试,但不知道为什么我必须在读取serialport DataReceived事件之后立即调用sleep(),就像这样

void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    Thread.Sleep(33); // <-- necessary to put, 33 is the lowest number in my PC
    int cntBytes = myComPort.BytesToRead; // length = 24 
    myComPort.Read(toBuffer, 0, curtBytes); // complete data (25 20 32 30 2C 56 41 2C 2D 35 35 0D 0A 25 20 32 30 2C 56 41 2C 46 0D 0A)
}

但是如果我事先没有睡觉就阅读,我会在阅读时遇到麻烦。完整的字符串将被分成几次

void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    //Thread.Sleep(33); // NO sleep here
    int cntBytes = myComPort.BytesToRead; // length = 4 
    myComPort.Read(toBuffer, 0, curtBytes); // incomplete data (25 20 32 30)
}
这让我很烦恼。如果你知道任何线索,我将非常感激。

0 个答案:

没有答案