日期:2014-05-18 浏览次数:21022 次
1 void comm_DataReceived(object sender, SerialDataReceivedEventArgs e) 2 { 3 int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致 4 byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据 5 received_count += n;//增加接收计数 6 comm.Read(buf, 0, n);//读取缓冲数据 7 builder.Remove(0, builder.Length);//清除字符串构造器的内容 8 //因为要访问ui资源,所以需要使用invoke方式同步ui。 9 this.Invoke((EventHandler)(delegate 0 { 1 //判断是否是显示为16禁止 2 if (checkBox3.Checked) 3 { 4 //依次的拼接出16进制字符串 5 foreach (byte b in buf) 6 { 7 builder.Append(b.ToString("X2") + " "); 8 } 9 } 0 else 1 { 2 //直接按ASCII规则转换成字符串 3 builder.Append(Encoding.ASCII.GetString(buf)); 4 } 5 //追加的形式添加到文本框末端,并滚动到最后。 6 richTextBox1.AppendText(builder.ToString()); 7 //修改接收计数 8 label7.Text = "接收字节数:" + received_count.ToString(); 9 })); 0 }