winfrom 控件刷新问题

qq328063 2016-12-15 12:46:51
最近在做这样一个winfrom项目
主界面上有大量lable,listbox
这里面的数据时我从某些硬件中读取出来的
实时读取赋值给lable,listbox等控件
现在出现的问题是 更新大量控件的时候造成程序的顿卡

尝试了两种方式 backgroundworker 这种方式不会造成程序顿卡 但是backgroundworker是在方法执行完成之后才刷新页面
导致我不能做到实时刷新 (0.5-1秒)

之后尝试了多线程,但是在线程里使用sleep会让程序停顿,阻碍了其他用户的操作。
现在卡在这了 希望大家给点意见。谢谢了
...全文
207 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
白衣如花 2016-12-16
  • 打赏
  • 举报
回复
引用 4 楼 u012948520 的回复:
读取是主动调用还是被动回调?是一直轮询还是单次查询? 首先排除主动调用获取数据耗时导致的顿卡(这个无解) 一般来说我会尝试如下代码:
foreach(Control ctrl in data)
{
    this.Invoke((Action)(() => {....}));
}
忘记说要多线程了
白衣如花 2016-12-16
  • 打赏
  • 举报
回复
读取是主动调用还是被动回调?是一直轮询还是单次查询? 首先排除主动调用获取数据耗时导致的顿卡(这个无解) 一般来说我会尝试如下代码:
foreach(Control ctrl in data)
{
    this.Invoke((Action)(() => {....}));
}
xian_wwq 2016-12-15
  • 打赏
  • 举报
回复
引用 2 楼 qq328063 的回复:
[quote=引用 1 楼 xian_wwq 的回复:] 1.除非客户强制性要求, 大量数据不要用那么多label 用datagridview等控件集中展示好些 2.如果数据真的很多,可以考虑分页 把显示的数据分不同的tab,需要显示的指标才处理 3.listview等控件均支持虚拟模式, 秒级刷新上万笔数据无压力
这些数据都是分散的 不能集中显示 不然也不用这么麻烦了 我现在的问题不是数据量大 而是要更新的控件个数多 读取的时间+给控件赋值的时间>实时时间(1s)[/quote] lz最好测试下,是读取的时间较长还是给控件赋值的时间较长 读取和赋值是两个操作,完全可以异步化
qq328063 2016-12-15
  • 打赏
  • 举报
回复
引用 1 楼 xian_wwq 的回复:
1.除非客户强制性要求, 大量数据不要用那么多label 用datagridview等控件集中展示好些 2.如果数据真的很多,可以考虑分页 把显示的数据分不同的tab,需要显示的指标才处理 3.listview等控件均支持虚拟模式, 秒级刷新上万笔数据无压力
这些数据都是分散的 不能集中显示 不然也不用这么麻烦了 我现在的问题不是数据量大 而是要更新的控件个数多 读取的时间+给控件赋值的时间>实时时间(1s)
xian_wwq 2016-12-15
  • 打赏
  • 举报
回复
1.除非客户强制性要求, 大量数据不要用那么多label 用datagridview等控件集中展示好些 2.如果数据真的很多,可以考虑分页 把显示的数据分不同的tab,需要显示的指标才处理 3.listview等控件均支持虚拟模式, 秒级刷新上万笔数据无压力

110,533

社区成员

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

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

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