serialPort.ReadByte() 操作超时

yishion_mao 2010-01-06 09:36:57
设置的操时时间是500毫秒.ReadBufferSize和WriteBufferSize是20480
public void SendCMD(Byte[] _OutputData, SerialPort serialPort)
{
_InputData = new Byte[1];
try
{
if (serialPort.IsOpen)
{
serialPort.DiscardInBuffer();
serialPort.DiscardOutBuffer();//清除缓冲区
}
else
{
serialPort.Open();//打开串口
}

try
{
serialPort.Write(_OutputData, 0, _OutputData.Length);
Array.Clear(_InputData, 0, _InputData.Length);
Array.Resize(ref _InputData, 0);
Byte FirstByte;
try
{
FirstByte = (Byte)serialPort.ReadByte();//这里操时了
}
catch (TimeoutException)
{
return;
}
catch (Exception)
{
throw;
}
Array.Resize(ref _InputData, 1);
_InputData[0] = FirstByte;
int Partition = 40;
while (true)
{
Thread.Sleep(Partition);//字节间超时毫秒
int BufferLength = 0;
int InputLength = _InputData.Length;
BufferLength = serialPort.BytesToRead;//检测接收缓冲区有效字节长度
if (BufferLength == 0)
{
break;
}
Array.Resize(ref _InputData, InputLength + BufferLength);
serialPort.Read(_InputData, InputLength, BufferLength);//读取有效字节
}
}
finally
{
serialPort.DiscardInBuffer();
serialPort.DiscardOutBuffer();//清除缓冲区
serialPort.Close();
}
}
finally
{
WriteLog(_InputData, 1);
}
}
...全文
730 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjp1234airen4385 2010-01-06
  • 打赏
  • 举报
回复
500 太小,改为2000
20480太大,改为默认,或更低。
另外和你硬件有关系的。
硬件不能及时相应的话,改成什么都白扯。
gll062 2010-01-06
  • 打赏
  • 举报
回复
写入数据和读取数据的函数应该对称,改改函数看行不行
antony1029 2010-01-06
  • 打赏
  • 举报
回复
顶!!
周药师 2010-01-06
  • 打赏
  • 举报
回复
“20480” 这么大
默认的是8192
Return门徒 2010-01-06
  • 打赏
  • 举报
回复
给个重写看先啊,谁知道你哪儿报什么错了?

111,120

社区成员

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

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

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