串口接收数据 求高手解决
voidcomm_DataReceived(objectsender,SerialDataReceivedEventArgse){intn=comm.BytesToRea...
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int n = comm.BytesToRead;
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
comm.Read(buf, 0, n);//读取缓冲数据
builder.Remove(0, builder.Length);//清除字符串构造器的内容
//因为要访问ui资源,所以需要使用invoke方式同步ui。
this.Invoke((EventHandler)(delegate
{
//直接按ASCII规则转换成字符串
// builder.Append(Encoding.ASCII.GetString(buf,0,n));
char[] cpara = Encoding.ASCII.GetChars(buf);
string str = new String(cpara);
this.lblLonInfo.Text = str;
}));
}
问题是每次 this.lblLonInfo.Text = str;
数据会丢失 从串口读取过来的数据不完整 怎么回事 谢谢
最后在接收的时候 加了一句 Thread.Sleep(100);
解决了! 不过还是谢谢大家的帮助! 展开
{
int n = comm.BytesToRead;
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
comm.Read(buf, 0, n);//读取缓冲数据
builder.Remove(0, builder.Length);//清除字符串构造器的内容
//因为要访问ui资源,所以需要使用invoke方式同步ui。
this.Invoke((EventHandler)(delegate
{
//直接按ASCII规则转换成字符串
// builder.Append(Encoding.ASCII.GetString(buf,0,n));
char[] cpara = Encoding.ASCII.GetChars(buf);
string str = new String(cpara);
this.lblLonInfo.Text = str;
}));
}
问题是每次 this.lblLonInfo.Text = str;
数据会丢失 从串口读取过来的数据不完整 怎么回事 谢谢
最后在接收的时候 加了一句 Thread.Sleep(100);
解决了! 不过还是谢谢大家的帮助! 展开
3个回答
展开全部
int DataLength=serialPort.BytesToRead;
int i=0;
StringBuilder sb=new StringBuilder();
while(i<DataLength)
{
byte[] ds=new byte[1024];
int len=serialPort.Read(ds,0,1024);
sb.Append(Encoding.Ascii.GetString(ds,0,len));
i+=len;
}
用这个方法读试一试,
int i=0;
StringBuilder sb=new StringBuilder();
while(i<DataLength)
{
byte[] ds=new byte[1024];
int len=serialPort.Read(ds,0,1024);
sb.Append(Encoding.Ascii.GetString(ds,0,len));
i+=len;
}
用这个方法读试一试,
展开全部
你不会先检测一下串口,没有那么多就少执行几次啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char[] cpara = Encoding.ASCII.GetChars(buf);
改为
char[] cpara = Encoding.Default.GetChars(buf);
试试
改为
char[] cpara = Encoding.Default.GetChars(buf);
试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询