C#清除缓冲区数据(急)
switch (ls_CmdType)//如果是开阀就按此格式添加
{
case "K"://开/关阀
ls_str = "I" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ isml.Substring(isml.Length - 2, 2)
+ ls_CmdType
+ ls_CmdTypeStr;
break;
case "V"://检查温度
ls_str = "L" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ isml.Substring(isml.Length - 2, 2)
+ ls_CmdType;
break;
case "T"://检查时间
ls_str = "L" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ isml.Substring(isml.Length - 2, 2)
+ "&8013";
//MessageBox.Show(ls_str);
break;
default:
ls_str = "0027";
break;
}
string model = protocol.Getinstance(ls_str)._Model;
if (!spPort.IsOpen)
{
OpenComm();
}
spPort.Write(model);//将指令写入串口缓冲区
System.Threading.Thread.Sleep(500);
dt.Clear();
dt.Dispose();
spPort.DiscardInBuffer();//清理输入缓冲区
spPort.DiscardOutBuffer();//清理输出缓冲区
//}
}
}
catch (System.Exception e)
{
MessageBox.Show(e.ToString(), "警告");
}
}
void spPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int bytes = spPort.BytesToRead;
// 创建字节数组
byte[] buffer = new byte[bytes];
// 读取缓冲区的数据到数组
spPort.Read(buffer, 0, bytes);
string data = Encoding.ASCII.GetString(buffer);//ByteArrayToHexString(buffer);
isstr += data;
isstr = isstr.Replace(" ", "");
}
当我触发检测时间按钮时,我发现缓冲区里数据还有时间的返回值,导致时间解析错误,
#B0035290&8013000000000014000137039052000000000000005D!#B0035290V000001002390CD!
#B0035290&8013000000000014000137039052000000000000005D!
这是我在逐步执行中捕捉到的数据,我触发一次命令,返回一个数据,但是导致数据在缓冲区积累,让我无法解析,怎么才能执行一次就清除缓冲区呢?