C# serialport问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 15:02:03
我现在使用C#设计一个读取串口数据的功能,串口的数据不能确定什么时候到来,采用事件结构监测,这个已经做到。还有一个问题是,我现在不能确定每次串口到来的数据是多少,因此无法用ReceivedBytesThreshold。想请教各位高手,有没有什么方法可以将一次触发的数据全部读出来呢?我现在只是用C#的组件来做,不想用API等其他方式,给个提示,最好是有示例代码。非常感谢!!

你试试 SerialPort.DataReceived 事件

http://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport.datareceived(VS.80).aspx

串口读数据的时候,本来就不是一次能读完的,因为SM向SU发送数据也是分次发的
所以可以采用 延时读取,在循环中判断port.BytesToRead是否完整,因为固定指令返回的数据长度也是固定的(成功or失败两种)
贴一段关键的代码 叶帆写的 用到.net 2.0的SerialPort 类
//发送命令
public int SendCommand(byte[] SendData, ref byte[] ReceiveData,int Overtime)
{

if(port.IsOpen)
{
ReceiveEventFlag = true; //关闭接收事件
port.DiscardInBuffer(); //清空接收缓冲区
port.Write(SendData, 0, SendData.Length);
int num=0,ret=0;
/* 你所疑惑的 begin*/
while (num++ < Overtime)
{
if (port.BytesToRead >= ReceiveData.Length) break;
System.Threading.Thread.Sleep(1);
}
if (port.BytesToRead >= ReceiveData.Length)
ret = port.Read(ReceiveData, 0, ReceiveData.