串口接收数据 求高手解决

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);

解决了! 不过还是谢谢大家的帮助!
展开
 我来答
Jarhf
2011-06-09 · TA获得超过1862个赞
知道小有建树答主
回答量:1736
采纳率:25%
帮助的人:1037万
展开全部
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;
  }

用这个方法读试一试,
lwsmicc
2011-06-11 · TA获得超过258个赞
知道答主
回答量:359
采纳率:0%
帮助的人:214万
展开全部
你不会先检测一下串口,没有那么多就少执行几次啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友55df3f4
2011-06-08 · TA获得超过211个赞
知道小有建树答主
回答量:150
采纳率:0%
帮助的人:184万
展开全部
char[] cpara = Encoding.ASCII.GetChars(buf);
改为
char[] cpara = Encoding.Default.GetChars(buf);
试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式