社区
C#
帖子详情
多线程利用serialport控件接收串口数据并在界面显示,数据更新很慢
棉花糖_码农夜读
2009-07-30 02:02:35
我用serialport控件,新建一个辅助线程用来接收数据,并在界面上实时的显示接收到得数据,一共10组,然后在一个定时器里不断的调用显示的子程序,定时60ms,可是数据并不能在这个时间里进行更新,数据更新速度很慢,我现在总觉得问题在,接收和显示,这两个没协调好,好像调用显示时数据没准备好,请高手帮忙,谢谢大家,我的QQ是373314575,邮箱是liupenglily@163.com,希望和大家共同学习,共同提高!
...全文
758
13
打赏
收藏
多线程利用serialport控件接收串口数据并在界面显示,数据更新很慢
我用serialport控件,新建一个辅助线程用来接收数据,并在界面上实时的显示接收到得数据,一共10组,然后在一个定时器里不断的调用显示的子程序,定时60ms,可是数据并不能在这个时间里进行更新,数据更新速度很慢,我现在总觉得问题在,接收和显示,这两个没协调好,好像调用显示时数据没准备好,请高手帮忙,谢谢大家,我的QQ是373314575,邮箱是liupenglily@163.com,希望和大家共同学习,共同提高!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
棉花糖_码农夜读
2009-08-05
打赏
举报
回复
我现在刚改成委托了,但是还是不能正常的更新数据,我是在显示那里用的委托,贴点代码吧,这样看更清楚,
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
打赏
举报
回复
在线程里用委托,直接就能更新界面了,最好用异步委托,这样你的数据发送的再快也没问题
棉花糖_码农夜读
2009-08-03
打赏
举报
回复
大家帮忙给看看啊,帮帮忙吧
棉花糖_码农夜读
2009-08-01
打赏
举报
回复
我现在就没有用datarecive事件。
棉花糖_码农夜读
2009-08-01
打赏
举报
回复
我用的是线程,不用定时器,怎么更新界面显示的数据,怎么回调?
qldsrx
2009-07-31
打赏
举报
回复
根本用不着定时器的,收到一组数据后直接回调显示即可。
黑脚印_DarkSpoor
2009-07-31
打赏
举报
回复
60ms更新一次,更新后加
Application.DoEvents();
更新有必要这么快吗?人的反应有这么快么?
棉花糖_码农夜读
2009-07-31
打赏
举报
回复
大家谁帮帮忙呀
风之影子
2009-07-31
打赏
举报
回复
根本用不着定时器的,收到一组数据后直接回调显示即可。
顶
四更山吐月
2009-07-31
打赏
举报
回复
新建一个线程来接收??
返回数据写在datareceived事件中就行了。
你设置一个缓冲区,datareceived触发的时候就将信息存入缓冲区中。当数据全部接收上来了,触发一个信号量,给线程。
你只需要开一个线程,访问缓冲区就行了。
棉花糖_码农夜读
2009-07-31
打赏
举报
回复
[Quote=引用 3 楼 qldsrx 的回复:]
根本用不着定时器的,收到一组数据后直接回调显示即可。
[/Quote]
怎么回调呀,我的接受和显示不是一个线程,显示是主线程完成的,接受是辅助线程!您看该怎么实现
棉花糖_码农夜读
2009-07-31
打赏
举报
回复
因为我的不是一组数据一共30组数据呢
ygnews2008
2009-07-31
打赏
举报
回复
这种情况不是直接用委托来做就好了,速度快得很。
利用
Se
ria
l
Port
控件
实现PC与PC
串口
通信(事件方式&查询方式)
利用
Se
ria
l
Port
控件
实现PC与PC
串口
通信(事件方式&查询方式)
C#上位机
串口
接收
数据
并绘图
采用C#开发,将下位机发送的
数据
显示并绘制曲线,配套FPGA频率计下位机
VS2008
串口
MSComm和
Se
ria
l
Port
包含用VS2008编写
串口
控件
的方法,主要是MSComm
控件
的使用方法,
Se
ria
l
Port
控件
的使用方法,MSComm
控件
的安装程序及安装方法
Se
ria
l
Port
控件
的使用
个人收集整理的
Se
ria
l
Port
控件
常用属性、方法和事件及其使用方法,并附有相应代码
c#中的
se
ria
l
port
控件
介绍了
串口
通信的C#中的实现
多线程
的核心在于多个代码块并发执行,本质特点在于各代码块之间的代码是乱序执行的。我们的程序是否需要
多线程
,就是要看这是否也是它的内在特点。
C#
111,098
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章