如何从硬盘加载图片并通过timer控件在pictureBox中展示
问题根因
- 每次Timer触发Tick事件时,代码直接通过
foreach遍历整个图片列表循环加载,整个循环会在极短时间内执行完成,界面没有机会完成渲染刷新,最终只会停留在列表最后一张图片,也无法实现逐张轮播的效果 - 没有维护当前播放的索引变量,无法记录上一次Tick事件触发时加载到的图片位置
修复方案
首先在窗体类中定义两个全局索引变量,用来记录两个PictureBox的当前播放位置:
// 雷达图当前播放索引 private int radarIndex = 0; // 卫星图当前播放索引 private int satelliteIndex = 0;
修改两个Timer的Tick事件代码:
private void timer1_Tick(object sender, EventArgs e) { // 空列表直接返回避免索引越界 if (filesRadar == null || filesRadar.Length == 0) return; pictureBox1.Load(filesRadar[radarIndex]); // 索引自增,到列表末尾后回到开头实现循环播放 radarIndex = (radarIndex + 1) % filesRadar.Length; } private void timer2_Tick(object sender, EventArgs e) { if (filesSatellite == null || filesSatellite.Length == 0) return; pictureBox2.Load(filesSatellite[satelliteIndex]); satelliteIndex = (satelliteIndex + 1) % filesSatellite.Length; }
额外排查项
- 确认Timer控件的
Enabled属性已设置为true,Interval属性设置为合理值(单位为毫秒,建议设置为1000~3000,不要设置过小) - 确认
filesRadar和filesSatellite中存储的是图片的绝对路径,且对应路径下的图片文件未损坏、可正常访问 - 确认PictureBox控件的
SizeMode属性设置为合适值,例如Zoom或StretchImage,避免因图片尺寸和控件尺寸不匹配导致看起来未加载成功
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

