|
楼主 |
发表于 2013-4-27 11:19:17
|
显示全部楼层
站长苏飞 发表于 2013-4-27 10:58
应该不会,你可以加个判断啊,如果是打开状态就不要再执行Open了
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据,声明数组长度为N
received_count += n;//增加接收计数
comm.Read(buf, 0, n);//读取缓冲数据,从0到N。
builder.Length=0;//清除字符串构造器的内容
//因为要访问ui资源,所以需要使用invoke方式同步ui。
this.Invoke((EventHandler)(delegate
{
//判断是否是显示为16进制
//if (checkBoxHexView.Checked)
//{
//依次的拼接出16进制字符串
//foreach (byte b in buf)
//{
// builder.Append(b.ToString("X2") + " ");
//}
//}
//else
//{
//直接按ASCII规则转换成字符串
builder.Append(Encoding.ASCII.GetString(buf));
//}
//追加的形式添加到文本框末端,并滚动到最后。
this.txGet.AppendText(builder.ToString());
//修改接收计数
labelGetCount.Text = "Get:" + received_count.ToString();
}));
}
在windows窗体中这样回复的很好啊 |
|