使用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呢?也就是说怎么判断内容结束了?
{
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呢?也就是说怎么判断内容结束了?
如果不将接收写成线程是不通不过的
我也是同样问题,还没解决
我还出现一个问题是,收到汉字是乱码,其它都是正常的
string str0 = serialPort1.ReadExisting();
logstr += "收到内容:" + str0 + "\n";
这句不报错了,不好意思