用串口对象,发送数据后》循环读取》超时后退出
#region 通用发送报文并接受
/// <summary>
/// 通用发送报文并接受
/// </summary>
/// <param name="sendByte"></param>
/// <param name="response"></param>
/// <returns></returns>
private bool SendData(byte[] sendByte, ref byte[] response)
{
//上锁
InteractiveLock.Enter();
try
{
//发送报文
MyCom.Write(sendByte, 0, sendByte.Length);
//定义一个Buffer
byte[] buffer = new byte[1024];
//定义一个内存
MemoryStream ms = new MemoryStream();
//定义读取开始时间
DateTime start = DateTime.Now;
//【1】获取当前缓冲区的值,判断是否有值,如果有值,读取过来,放到内存中
//接着再去判断,如果当前缓冲区的值为0,说明读完了
//【2】如果每次读取都读不到,我们用超时时间来做判断
while (true)
{
Thread.Sleep(SleepTime);
if (MyCom.BytesToRead >= 1)
{
int spcount = MyCom.Read(buffer, 0, buffer.Length);
ms.Write(buffer, 0, spcount);
}
else
{
//判断是否超时
if ((DateTime.Now - start).TotalMilliseconds > this.ReceiveTimeOut)
{
ms.Dispose();
return false;
}
else if (ms.Length > 0)
{
break;
}
}
}
response = ms.ToArray();
ms.Dispose();
return true;
}
catch (Exception)
{
return false;
}
finally
{
//解锁
InteractiveLock.Leave();
}
}
#endregion