C#Winform PictrueBox高频率切换图片显示太慢问题

dengjingjian628 2013-01-12 04:32:03
因为公司年会要做个抽奖系统,系统要求显示人员头像。我在一个界面上同时显示5个pictureBox控件。按抽奖的时候用time控件,每过500毫秒图片滚动一次。
抽一等奖的时候界面是只显示一个pictureBox的,所以500毫秒滚动一次压力不是很大,滚得还是挺快的。
但是抽四等、五等奖的时候同时需要抽5个名额,也就是界面上会有5个头像同时滚动,但是这样的话,就算把time控件设置成500毫秒滚动一次,也不会像抽一等奖时只有一个pictureBox滚动得快。原因估计就是pictureBox多了,加载得变慢了,所以图片滚动看似就慢了。
请问各位大大们,怎么解决这样的问题?
...全文
1315 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengjingjian628 2013-01-24
  • 打赏
  • 举报
回复
引用 8 楼 nonocast 的回复:
1. 全部载入内存 2. 开一个timer,刷5个人,而不是每个人都开一个timer
你说的这个方法之前试过,不行,不过那时候程序没有优化好。后面优化过就没有试这种方法了
dengjingjian628 2013-01-24
  • 打赏
  • 举报
回复
引用 10 楼 zyr987503101 的回复:
LZ问题解决可木有,最近也在搞抽奖的程序呢,解决了赶紧分享下哦,也好让大家学习学习。。。
我们迎春晚会早搞完了,抽奖也抽过了。不过换了一种方式滚动图片了,就是界面上只滚动一个图片,按停上的时候5个图片一个一个地显示出来,每一个间隔1.5秒,而不是同时滚动5个图片了。同时只滚动一个图片是很快的,同时滚5个图片就慢。
dengjingjian628 2013-01-24
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
另外使用timer的一个常见、但是许多人视而不见的设计bug,就是在前一个事件处理方法还没有完毕时,又去执行下一个事件处理。 正确的代码是首先在事件处理方法中先对Timer执行Close()方法或者设置enable=false,关闭它。然后处理完,才调用其Start()方法或者设置enable=true,再次启动定时。
我们迎春晚会早搞完了,抽奖也抽过了。不过换了一种方式滚动图片了,就是界面上只滚动一个图片,按停上的时候5个图片一个一个地显示出来,每一个间隔1.5秒,而不是同时滚动5个图片了。同时只滚动一个图片是很快的,同时滚5个图片就慢。
zyr987503101 2013-01-15
  • 打赏
  • 举报
回复
LZ问题解决可木有,最近也在搞抽奖的程序呢,解决了赶紧分享下哦,也好让大家学习学习。。。
year365 2013-01-14
  • 打赏
  • 举报
回复
1.用FileStream 读 2.不用 pictureBox 直接窗体paint 3.开窗体 双缓冲 4.优化流程
  • 打赏
  • 举报
回复
另外使用timer的一个常见、但是许多人视而不见的设计bug,就是在前一个事件处理方法还没有完毕时,又去执行下一个事件处理。 正确的代码是首先在事件处理方法中先对Timer执行Close()方法或者设置enable=false,关闭它。然后处理完,才调用其Start()方法或者设置enable=true,再次启动定时。
  • 打赏
  • 举报
回复
引用 1 楼 dengjingjian628 的回复:
上面说错了,是50毫秒,而不是500毫秒。
晕死! 低于200毫秒的“抽奖滚动”都是没有意义的。 你的所谓“timer控件控制显示”到底是怎么控制的呢?没有代码没有真相!假设要显示图片1,难道它要阻塞到图片2~图片4全都加载完毕,才开始显示?这就是你程序设计问题了。
dengjingjian628 2013-01-13
  • 打赏
  • 举报
回复
怎么没人来啊?自己帮顶!
nonocast 2013-01-13
  • 打赏
  • 举报
回复
1. 全部载入内存 2. 开一个timer,刷5个人,而不是每个人都开一个timer
dengjingjian628 2013-01-12
  • 打赏
  • 举报
回复
果然是因为pictureBox多了的问题。我刚试了下,同时滚动2个图片的时候也是很快的,同是滚动3个的话就有显得慢了些,同时滚动4个的话会更慢一些。
dengjingjian628 2013-01-12
  • 打赏
  • 举报
回复
引用 2 楼 xtiu77 的回复:
预先把图片装入内存呢???
请问要怎么预先所图处装入内存。其实我就是这样做的,先把所有图片都用Image.FormFile的方式装入List<Image>里面的,然后取图片的时候就用this.pictureBox1.Image=List[i]来取的。
xtiu77 2013-01-12
  • 打赏
  • 举报
回复
预先把图片装入内存呢???
dengjingjian628 2013-01-12
  • 打赏
  • 举报
回复
上面说错了,是50毫秒,而不是500毫秒。

110,567

社区成员

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

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

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