C#中串口通信的数据接收问题

nishizhen 2009-11-27 02:13:06
使用C#做RS232串口通讯程序,接收方法

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] b = new byte[serialPort1.BytesToRead];
serialPort1.Read(b, 0, b.Length);
string data = "";

foreach (var i in b)
{
data += i.ToString() + "-";
}

textBox1.Text += "收到数据:" + data + "\r\n";
}


这样的话,当ReceivedBytesThreshold=1时 每次收到的数据就会是美8个字节激活一次这个方法也就是说serialPort1.BytesToRead=8。

分析原因是缓冲区还没全部缓冲就开始Read。所以在Read方法前加一行
Thread.Sleep(100);

的话 就能够接收到全部的数据了,也就是说serialPort1.BytesToRead=发送的全部数据的长度。

这个问题怎么解决呢?

怎么让他一次触发,然后不需要Thread.Sleep呢?

也就是说怎么判断内容结束了?

...全文
147 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxm203 2009-12-23
  • 打赏
  • 举报
回复
Thread.Sleep(100);
这句不报错了,不好意思
wxm203 2009-12-23
  • 打赏
  • 举报
回复
请问Thread.Sleep(100);怎么回进去的
如果不将接收写成线程是不通不过的
我也是同样问题,还没解决
我还出现一个问题是,收到汉字是乱码,其它都是正常的
string str0 = serialPort1.ReadExisting();
logstr += "收到内容:" + str0 + "\n";
freeboy827 2009-11-27
  • 打赏
  • 举报
回复
serialPort1.BytesToRead=8

这个不行吗
fxj0001 2009-11-27
  • 打赏
  • 举报
回复
bucuo
yxfox 2009-11-27
  • 打赏
  • 举报
回复
接分

111,120

社区成员

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

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

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