多线程利用serialport控件接收串口数据并在界面显示,数据更新很慢

棉花糖_码农夜读 2009-07-30 02:02:35
我用serialport控件,新建一个辅助线程用来接收数据,并在界面上实时的显示接收到得数据,一共10组,然后在一个定时器里不断的调用显示的子程序,定时60ms,可是数据并不能在这个时间里进行更新,数据更新速度很慢,我现在总觉得问题在,接收和显示,这两个没协调好,好像调用显示时数据没准备好,请高手帮忙,谢谢大家,我的QQ是373314575,邮箱是liupenglily@163.com,希望和大家共同学习,共同提高!
...全文
758 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我现在刚改成委托了,但是还是不能正常的更新数据,我是在显示那里用的委托,贴点代码吧,这样看更清楚,
private void disp() //对处理后的数据在界面上进行显示
{
label31.Invoke(new EventHandler(delegate
{
label31.Text = cunt.ToString();
}));
if (address == 112)
{
switch (fun_code)
{
case 80: //实时浓度
gas_value1.Invoke(new EventHandler(delegate
{
gas_value1.Clear();
gas_value1.SelectionFont = new Font("宋体", 10, System.Drawing.FontStyle.Bold);
gas_value1.SelectedText = ' ' + gas_value.ToString();
}));
break;
case 39: //上限
gas_alarm_up1.Invoke(new EventHandler(delegate
{
gas_alarm_up1.Clear();
gas_alarm_up1.SelectionFont = new Font("宋体", 10, System.Drawing.FontStyle.Bold);
gas_alarm_up1.SelectedText = ' ' + gas_alarm_h.ToString();
}));
break;
case 41: //下限
gas_alarm1.Invoke(new EventHandler(delegate
{
gas_alarm1.Clear();
gas_alarm1.SelectionFont = new Font("宋体", 10, System.Drawing.FontStyle.Bold);
gas_alarm1.SelectedText = ' ' + gas_alarm_l.ToString();
}));
break;
}
这是一部分,然后我就在辅助线程调用的接收数据的方法里调用这个显示,结果还是不行,不知道什么原因?
ttianqq 2009-08-03
  • 打赏
  • 举报
回复
在线程里用委托,直接就能更新界面了,最好用异步委托,这样你的数据发送的再快也没问题
  • 打赏
  • 举报
回复
大家帮忙给看看啊,帮帮忙吧
  • 打赏
  • 举报
回复
我现在就没有用datarecive事件。
  • 打赏
  • 举报
回复
我用的是线程,不用定时器,怎么更新界面显示的数据,怎么回调?
qldsrx 2009-07-31
  • 打赏
  • 举报
回复
根本用不着定时器的,收到一组数据后直接回调显示即可。
  • 打赏
  • 举报
回复
60ms更新一次,更新后加
Application.DoEvents();

更新有必要这么快吗?人的反应有这么快么?
  • 打赏
  • 举报
回复
大家谁帮帮忙呀
风之影子 2009-07-31
  • 打赏
  • 举报
回复
根本用不着定时器的,收到一组数据后直接回调显示即可。


四更山吐月 2009-07-31
  • 打赏
  • 举报
回复
新建一个线程来接收??
返回数据写在datareceived事件中就行了。
你设置一个缓冲区,datareceived触发的时候就将信息存入缓冲区中。当数据全部接收上来了,触发一个信号量,给线程。

你只需要开一个线程,访问缓冲区就行了。

  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qldsrx 的回复:]
根本用不着定时器的,收到一组数据后直接回调显示即可。
[/Quote]

怎么回调呀,我的接受和显示不是一个线程,显示是主线程完成的,接受是辅助线程!您看该怎么实现
  • 打赏
  • 举报
回复
因为我的不是一组数据一共30组数据呢
ygnews2008 2009-07-31
  • 打赏
  • 举报
回复
这种情况不是直接用委托来做就好了,速度快得很。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧