如果串口的字节数多,那么每间隔一会BytesToRead的结果便会不同(每次都会增加)。用DataReceived事件也是这样。于是
byte inbuffer =new byte[serialPort.BytesToRead];
serialPort.Read(inbuffer, 0, serialPort.BytesToRead);
便不能把数据全部读取,只能读取一部分。后来又加上循环,改成:
byte inbuffer =new byte[serialPort.BytesToRead];
Thread.Sleep(200);
while (inbuffer.Length != serialPort.BytesToRead)
{
Thread.Sleep(200);
inbuffer = new byte[serialPort.BytesToRead];
}
serialPort.Read(inbuffer, 0, serialPort.BytesToRead);可事实上根本就不起作用。因为循环体根本就没执行。
不知如何解决 请教高人。。
byte inbuffer =new byte[serialPort.BytesToRead];
serialPort.Read(inbuffer, 0, serialPort.BytesToRead);
便不能把数据全部读取,只能读取一部分。后来又加上循环,改成:
byte inbuffer =new byte[serialPort.BytesToRead];
Thread.Sleep(200);
while (inbuffer.Length != serialPort.BytesToRead)
{
Thread.Sleep(200);
inbuffer = new byte[serialPort.BytesToRead];
}
serialPort.Read(inbuffer, 0, serialPort.BytesToRead);可事实上根本就不起作用。因为循环体根本就没执行。
不知如何解决 请教高人。。
解决方案 »
- 建一个网页,能把数据库里的数据显示成表格,并画图。供客户浏览,复杂吗?
- 这种情况下程序究竟会怎样运行?
- 新手,找不到mainmenu
- 我想制作一个类似ASDsee的东东啊!
- 如何在Page_Load中判断 客护端 是否有xxx名称的cookie
- 请问如何将窗口作为参数,在子程序中使用
- 求OUTLOOK(像QQ面板)风格控件的源码
- 分享个读取INI文件类 不要分 需要的下载
- 【c#】JJStart 0.4 beta,桌面快捷方式启动,热键、贴边隐藏、呼出、二级分组、各种插件等功能
- c# 如何让textbox 只能输入十六进制?
- winfrom动态创建CheckBox
- 关于无法在WEB服务器上启动调试的问题
意思是数据是连续产生,顺序存取的。你如何能读完呢?如果串口数据协议简单,你可以设置Serialport控件的NewLine属性,例如常见的回车换行结尾,就设置NewLine="\r\n";然后再你的时间里写:ReadLine,应该就能读到你要的数据。反之,一般的过程是读取->缓存->判定数据完整性->数据校验->数据分析->通知界面或丢弃。
byte[] inbuffer =new byte[1024];
string instr;
while (serialPort.BytesToRead > 0)
{
int len = Min(1024, serialPort.BytesToRead);
serialPort.Read(inbuffer, 0, len);
//处理inbuffer
instr += ASCII.GetString(inbuffer, 0, len);
//处理字符串
}
Com口是连续读的,不会有结束的时候,一般有接收事件触发时,连续把串口的数据全部读取,然后再做处理,处理完成后看具体情况剩下的数据是丢弃还是保留到下一次接着处理。
serialPort.ReadTimeout = 20;
int len = 0;
int maxLen=1000;
byte[] data = new byte[maxLen];
try
{
//读串口数据
while (true)
{
data[len] = (byte)serialPort.ReadByte();
len++;
}
}
catch { }
byte[] byteBar = new byte[bytecount];
serialPort1.Read(byteBar, 0, bytecount);
for (int i = 0; i < byteBar.Length; i++)
{
if (byteBar[i].ToString() != "13")
{
ls_ReceviBAR += (char)byteBar[i];
}
}