搜索
bottom↓
回复: 33

继续问上位机的问题,ListBox大量刷新会闪烁怎么办好

[复制链接]

出0入14汤圆

发表于 2017-9-12 16:56:24 | 显示全部楼层 |阅读模式
如题,VB6.0的ListBox刷新数据会闪烁,目前测试大量数据上来

目前只是 用  List1.List(ExistN) = str   这种语句来更新内容(内容一样)

还是会造成List界面闪烁,现在不知道怎么解决了


请教各位做上位机的怎么避免大量数据刷新造成闪烁的啊,而且又要实时显示

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2017-9-12 17:01:08 | 显示全部楼层
不知道有没有 begin end 这种异步填充的  方法   应该是有的  异步填充完毕 一次刷上去

出0入0汤圆

发表于 2017-9-12 17:06:53 | 显示全部楼层
怎么还在用VB6.0,用VB.NET也不比VB6.0有多大差别

出0入14汤圆

 楼主| 发表于 2017-9-12 17:17:55 | 显示全部楼层
tomtone 发表于 2017-9-12 17:06
怎么还在用VB6.0,用VB.NET也不比VB6.0有多大差别

那vb.net有什么办法解决?

出0入14汤圆

 楼主| 发表于 2017-9-12 17:18:21 | 显示全部楼层
浮华一生 发表于 2017-9-12 17:01
不知道有没有 begin end 这种异步填充的  方法   应该是有的  异步填充完毕 一次刷上去 ...

没看到过

出0入0汤圆

发表于 2017-9-12 17:23:06 | 显示全部楼层
isakura 发表于 2017-9-12 17:17
那vb.net有什么办法解决?

老的VC6.0和VB6.0本来就有刷窗闪的问题,不记得怎么改的了. 可能换新版本的就不会闪了

出0入0汤圆

发表于 2017-9-12 17:26:05 | 显示全部楼层
我没有用过 vb
我在 c# winform 上遇到过,大量数据,堵塞 ui 的情况。


当时具体是这样的:
* 从下位机读数据
* 读到的数据大概是上千之后,再往 list 控件里写就会一卡一卡的
* 当时也想了很多(其实是搜索了)的办法,如,异步或者用一个 list 先憋一会,在一股脑写入,等等其他
* 最后找到一个解决方法(下面附上连接),我记得,当时测试的几千上万条也没有问题。

link:DataGridView的虚模式填充 http://www.cnblogs.com/qingteng1983/archive/2010/05/09/1730905.html

出0入0汤圆

发表于 2017-9-12 17:47:50 | 显示全部楼层
tomtone 发表于 2017-9-12 17:06
怎么还在用VB6.0,用VB.NET也不比VB6.0有多大差别

新的.NET想安装也不容易,我装.NET2015装了5个多小时也没装好,最后没耐心了就不装了,网速是50M的。微软的东西真是越来越臃肿

出0入0汤圆

发表于 2017-9-12 17:52:17 | 显示全部楼层
闪烁估计是你哪地方处理的不好,WINDOWS下开发完成同样的功能不同的编程方法,效率可能相差几十倍甚至上百倍

出0入0汤圆

发表于 2017-9-12 17:52:37 | 显示全部楼层
modbus 发表于 2017-9-12 17:47
新的.NET想安装也不容易,我装.NET2015装了5个多小时也没装好,最后没耐心了就不装了,网速是50M的。微软 ...

你得选,只装要用到的

出0入14汤圆

 楼主| 发表于 2017-9-12 18:17:10 | 显示全部楼层
modbus 发表于 2017-9-12 17:52
闪烁估计是你哪地方处理的不好,WINDOWS下开发完成同样的功能不同的编程方法,效率可能相差几十倍甚至上百 ...

数据不大的时候不明显的,以前没做过这么大的应用....一秒钟才几帧ID的

现在一秒钟200帧ID......显示效果立马差了....

出300入477汤圆

发表于 2017-9-12 20:26:50 来自手机 | 显示全部楼层
开double buffer,然后每次收到数据就enable一个timer,定时20ms,timer到了就批量插入之前收到的所有数据然后disable自身。这样保证20毫秒内不管收到几次数据只插入并刷新显示一次。你刷的太快没意义,人眼又看不过来

出0入0汤圆

发表于 2017-9-12 20:44:31 | 显示全部楼层
插入之前先隐藏
插入后再显示,中间用显示另外一个listbox 做指示

出0入0汤圆

发表于 2017-9-12 20:57:03 | 显示全部楼层
zyqcome 发表于 2017-9-12 17:52
你得选,只装要用到的

选了,但选的比较多些,后来网上搜看有很多全选的说装了一晚上也没装好

出0入0汤圆

发表于 2017-9-12 20:58:18 | 显示全部楼层
isakura 发表于 2017-9-12 18:17
数据不大的时候不明显的,以前没做过这么大的应用....一秒钟才几帧ID的

现在一秒钟200帧ID......显示效 ...

一秒钟200帧肯定不能用常规方法直接刷了

出0入0汤圆

发表于 2017-9-12 21:09:55 | 显示全部楼层
如果非要刷新很快就不适合用控件了,这些控件设计时就没考虑这些应用,可考虑用PictureBox控件结合绘图函数完全用程序实现,特殊应用程序肯定复杂了

出300入477汤圆

发表于 2017-9-12 21:25:49 来自手机 | 显示全部楼层
modbus 发表于 2017-9-12 20:58
一秒钟200帧肯定不能用常规方法直接刷了

不要忘了你的显示屏每秒只能刷60帧!
你想刷更多的帧数是没意义的。就算你能往显存里写更多帧也没用。
你一秒收多少个数据也没意义,最佳做法是缓存起来凑够一个刷新周期再一起扔给显示。

出300入477汤圆

发表于 2017-9-12 21:29:26 来自手机 | 显示全部楼层
对windows gdi的默认做法来说,你刷屏太快了还会造成显示内容撕列(你写显示写到一半刚好碰上系统刷屏的时刻,结果刷上去一半旧一半新)

出870入263汤圆

发表于 2017-9-12 21:49:45 | 显示全部楼层
.net 用 ListBox.BeginUpdate()和ListBox.EndUpdate()把设置列表的代码包起来。

出0入0汤圆

发表于 2017-9-12 22:22:17 来自手机 | 显示全部楼层
虚拟模式然后100ms刷新一次勉强能看

出0入14汤圆

 楼主| 发表于 2017-9-12 22:37:21 | 显示全部楼层
q457344370 发表于 2017-9-12 22:22
虚拟模式然后100ms刷新一次勉强能看

vb6.0有虚拟模式吗

出0入14汤圆

 楼主| 发表于 2017-9-12 22:38:14 | 显示全部楼层
redroof 发表于 2017-9-12 21:25
不要忘了你的显示屏每秒只能刷60帧!
你想刷更多的帧数是没意义的。就算你能往显存里写更多帧也没用。
你 ...

我看了下,现在是定时10ms刷的..明天试试20ms  30ms的效果

出0入0汤圆

发表于 2017-9-12 22:38:27 来自手机 | 显示全部楼层
isakura 发表于 2017-9-12 22:37
vb6.0有虚拟模式吗

.net应该有的

出0入14汤圆

 楼主| 发表于 2017-9-12 22:40:04 | 显示全部楼层
redroof 发表于 2017-9-12 20:26
开double buffer,然后每次收到数据就enable一个timer,定时20ms,timer到了就批量插入之前收到的所有数据 ...

我现在是定时10ms的

出0入14汤圆

 楼主| 发表于 2017-9-13 10:06:22 | 显示全部楼层
现在最新测试的情况....

我现在判断一帧数据是不是相等才刷新,现在哪怕我只刷新一行也会闪烁...

出0入264汤圆

发表于 2017-9-13 10:18:36 | 显示全部楼层
只有自己绘制才不闪

出0入14汤圆

 楼主| 发表于 2017-9-13 10:46:08 | 显示全部楼层
mcu_lover 发表于 2017-9-13 10:18
只有自己绘制才不闪

你的意思是用text一条一条来显示????

出0入14汤圆

 楼主| 发表于 2017-9-13 12:04:29 | 显示全部楼层
gongxd 发表于 2017-9-12 20:44
插入之前先隐藏
插入后再显示,中间用显示另外一个listbox 做指示

那这样要两个list的操作完全一样才行啊

出10入12汤圆

发表于 2017-9-13 12:51:11 | 显示全部楼层
update true

出0入0汤圆

发表于 2017-9-13 23:40:54 | 显示全部楼层
LIST控件在插入数据时,有可能还要排序,慢是没有办法的事。碰到这种情况,反正人眼也不可能辨别,可以适当降低刷新的速度。

出0入14汤圆

 楼主| 发表于 2017-9-14 00:46:36 | 显示全部楼层
cock 发表于 2017-9-13 23:40
LIST控件在插入数据时,有可能还要排序,慢是没有办法的事。碰到这种情况,反正人眼也不可能辨别,可以适当 ...

现在不是慢,我现在手动一帧一帧的添加都会闪屏的...

出10入120汤圆

发表于 2017-9-14 05:38:03 来自手机 | 显示全部楼层
这是由.net自身缺陷造成的,楼主查查双缓冲机制,我以前写的系统也是这么闪烁,随功能正常到用感觉不爽,后来使用了双缓冲搞定。

出0入0汤圆

发表于 2017-9-14 09:26:25 | 显示全部楼层
modbus 发表于 2017-9-12 20:58
一秒钟200帧肯定不能用常规方法直接刷了

显示器都没这么快。。。

出0入14汤圆

 楼主| 发表于 2017-9-14 09:41:13 | 显示全部楼层
makesoft 发表于 2017-9-14 05:38
这是由.net自身缺陷造成的,楼主查查双缓冲机制,我以前写的系统也是这么闪烁,随功能正常到用感觉不爽,后 ...

我现在发现可能不是缓冲的影响的....我现在用个按键模拟,点一下,显示一包数据....

用手动去操作都会闪,点一下闪以下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 20:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表