项目背景:
界面包括几百个终端模拟对象,为自定义多变形控件,在1/s次与实际终端采样通讯频率下,要求软件实时更新,实际终端有运行、停止、暂停、工作结束、断电、告警等多种实时模式,软件界面需要将各种模式用不同背景颜色表示出来,并且将电压、电流、状态等参数显示在模拟终端。
面临问题: 界面刷新闪烁,让用户视觉感觉差!
●初期方法:
采用单纯开启双缓冲
this.SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw |
ControlStyles.AllPaintingInWmPaint, true);
根本无法解决问题
●具体解决办法:
a 原理部分:
1 首先通讯、业务处理、界面线程序分开,通讯部分可开启多个子线程后台运行,采样数据、状态等。
2业务处理部分的线程负责对采样数据的分析和存储,以及根据状态对多个通讯线程进行启动和停止,也叫就是管理线程的线程
3 界面线程只负责更新界面状态和与响应用户交互。几百个模拟终端全屏都无法显示完全,采取分组显示更新,这样刷新频率明显下降。

本文介绍了一个项目中如何使用双缓冲技术解决高频刷新导致的界面闪烁问题。通过将通讯、业务处理和界面更新分离到不同线程,并优化控件的OnPaint方法,实现了界面的平滑更新,提高了用户体验。
最低0.47元/天 解锁文章
637

被折叠的 条评论
为什么被折叠?



