serialport的read方法问题

wangji666666 2010-06-07 03:25:07
SerialPort.Read 方法 (Byte[], Int32, Int32)
参数
buffer
将输入写入到其中的字节数组。

offset
缓冲区数组中开始写入的偏移量。

count
要读取的字节数。

返回值
读取的字节数。
MSDN上是这样说明的,但是为什么读到一个字节该方法就返回了呢?
假设int readLength = m_SerialPort.Read(m_Revs, 0, 6);
我给的参数是读取6个字节,但是为什么它读到一个字节就返回?为什么不等到读到6个字节才返回呢?
...全文
2830 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
marongc 2010-12-02
  • 打赏
  • 举报
回复 1
Dim mSize As Integer = Me.SerialPort1.BytesToRead '获取接收缓冲区中数据的字节数。
ReDim mRecvByte(mSize - 1)
SerialPort1.Read(mRecvByte, 0, mSize)
oneatree 2010-06-07
  • 打赏
  • 举报
回复
mark
wangji666666 2010-06-07
  • 打赏
  • 举报
回复
用WHILE的话超时设置了不就没有用了吗,万一没有读到指定数量那就死循环了啊
我现在的疑问就是为什么没有读到指定数量的字节才返回,假设没有读到指定字节也得超时后返回啊,为什么一读到就返回,是不是READ()方法使用的不对?
jiezi316 2010-06-07
  • 打赏
  • 举报
回复
是不是你的由于包被分开成几个了?
如果你确定包的个数是6个。那么你可以

int sum = 0;
while(ture)
{
//清理buffer
int read = ComPort.Read(buffer,0,bytes);
//将读出的buffer[read]放到总的BUFFER里面
sum+=read;
if(sum >= bytes)
break;
}
大概思路就是一直读到需要个数的字节才停止读。
jiezi316 2010-06-07
  • 打赏
  • 举报
回复
是不是你的由于包被分开成几个了?
如果你确定包的个数是6个。那么你可以

int sum = 0;
while(ture)
{
int read = ComPort.Read(buffer,0,bytes);
//将读出的buffer[read]放到总的BUFFER里面
sum+=read;
if(sum >= bytes)
break;
}
wangji666666 2010-06-07
  • 打赏
  • 举报
回复
上述网站并没有解决问题啊,
// 获取字节长度

int bytes = ComPort.BytesToRead;

// 创建字节数组

byte[] buffer = new byte[bytes];

// 读取缓冲区的数据到数组

ComPort.Read(buffer, 0, bytes);

bytes只能是ComPort.BytesToRead吗?不能自己设置吗?
问题现在就是自己设置了好像没用,并没有读到自己设置的值才返回,而是一读到就返回了
wangji666666 2010-06-07
  • 打赏
  • 举报
回复
“这个要看m_SerialPort这个流到底有多少数据,如果只有1个字节,她就会返回了。”
它的数据有6个,我调试的时候,有间隔时间,就能全部返回,但是我全速运行,它就返回一个。全速运行时返回的字节数INT就是1
linmingtao 2010-06-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100607/15/08e0264a-ebcd-4864-b56b-c3d149305de0.html?47028
linmingtao 2010-06-07
  • 打赏
  • 举报
回复
是读取缓冲区中0-6的字节吧??
jiezi316 2010-06-07
  • 打赏
  • 举报
回复
你可以跟踪下返回值INT,这个就是指读到的字节数
jiezi316 2010-06-07
  • 打赏
  • 举报
回复
这个要看m_SerialPort这个流到底有多少数据,如果只有1个字节,她就会返回了。
wangji666666 2010-06-07
  • 打赏
  • 举报
回复
很奇怪,难道READ方法的第三个参数没有用吗?还是要设置其他的参数才行?

110,567

社区成员

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

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

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