C#清除缓冲区数据(急)

一条路坚持下去 2013-01-28 10:06:01
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!

这是我在逐步执行中捕捉到的数据,我触发一次命令,返回一个数据,但是导致数据在缓冲区积累,让我无法解析,怎么才能执行一次就清除缓冲区呢?
...全文
828 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
蝶恋花雨 2013-01-29
  • 打赏
  • 举报
回复
spPort.Write(model);//将指令写入串口缓冲区 写入之前先清除下或者释放。然后再写。
  • 打赏
  • 举报
回复
//Dispose(true); GC.SuppressFinalize(this);

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧