public void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int n = COM.BytesToRead;//获取接收缓冲区中数据的字节数
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
COM.Read(buf, 0, n);//读取缓冲数据
string strRcv = null;
//因为要访问ui资源,所以需要使用invoke方式同步ui。
if (AllowReceive == true)
{
for (int i = 0; i < buf.Length; i++)
{ strRcv += buf[i].ToString("X2");
}
UpdateRecevie(strRcv.ToString().ToUpper());
}
else {
COM.DiscardInBuffer();
}
}
public delegate void UpdateString(object NewData);
public void UpdateRecevie(object NewData)
{
if (this.InvokeRequired)//等待异步
{
UpdateString _myInvoke = new UpdateString(UpdateRecevie);
this.Invoke(_myInvoke, new object[] { NewData });
}
else
{
tx_Show.AppendText(NewData.ToString() + "\n");
tx_Show.SelectionStart = tx_Show.Text.Length - 1;
tx_Show.ScrollToCaret();
}
}实现效果如上图,第一次可以用一行完整实现读取的信息,后面在读信息就把一行完整的信息分成几段显示。 tx_Show.AppendText(NewData.ToString() + "\n");如果不加换行符,就会在上一次的接收数据后面后面的数据。
想要的结果:
把两次接收的结果分为两行显示。
以上代码是看别人的
{
int n = COM.BytesToRead;//获取接收缓冲区中数据的字节数
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
COM.Read(buf, 0, n);//读取缓冲数据
string strRcv = null;
//因为要访问ui资源,所以需要使用invoke方式同步ui。
if (AllowReceive == true)
{
for (int i = 0; i < buf.Length; i++)
{ strRcv += buf[i].ToString("X2");
}
UpdateRecevie(strRcv.ToString().ToUpper());
}
else {
COM.DiscardInBuffer();
}
}
public delegate void UpdateString(object NewData);
public void UpdateRecevie(object NewData)
{
if (this.InvokeRequired)//等待异步
{
UpdateString _myInvoke = new UpdateString(UpdateRecevie);
this.Invoke(_myInvoke, new object[] { NewData });
}
else
{
tx_Show.AppendText(NewData.ToString() + "\n");
tx_Show.SelectionStart = tx_Show.Text.Length - 1;
tx_Show.ScrollToCaret();
}
}实现效果如上图,第一次可以用一行完整实现读取的信息,后面在读信息就把一行完整的信息分成几段显示。 tx_Show.AppendText(NewData.ToString() + "\n");如果不加换行符,就会在上一次的接收数据后面后面的数据。
想要的结果:
把两次接收的结果分为两行显示。
以上代码是看别人的
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货