第一次点击按钮时,它会快速显示pictureBox1
中的图像。但是在一些图像之后,它变得非常慢。
它像慢动作模式一样逐个显示图像。
这是按钮点击事件代码:
private void button5_Click(object sender, EventArgs e)
{
_files = new List<FileInfo>();
myTrackPanelss1.trackBar1.Value = 0;
_indx = 0;
_files.AddRange(_fi);
_files = _files.OrderBy(f => f.LastWriteTime).ToList();
button5.ForeColor = Color.Red;
button6.ForeColor = Color.Black;
button7.ForeColor = Color.Black;
timer3.Start();
button6.Enabled = true;
button6.Text = "Pause";
button7.Enabled = true;
}
变量_indx
是全局int
。
然后是timer3 tick事件:
private void timer3_Tick(object sender, EventArgs e)
{
try
{
myTrackPanelss1.trackBar1.Maximum = _files.Count;
myTrackPanelss1.trackBar1.Minimum = 0;
Image iOLd = this.pictureBox1.Image;
Image img = Image.FromFile(_files[_indx].FullName);
myTrackPanelss1.trackBar1.Value = _indx;
label22.Text = _files[_indx].Name;
this.pictureBox1.Image = img;
if (iOLd != null)
iOLd.Dispose();
_indx++;
if (_indx >= _files.Count)
{
_indx = 0;
}
timer3.Interval = 40;
}
catch
{
}
}
有时当我在计时器启动时单击按钮时,它会显示pictureBox1
中的图像非常慢。有时它会像40区间那样快速地显示它们,然后在某些时候它会变慢。我无法弄清楚为什么它会变慢。
答案 0 :(得分:0)
在计时器之外声明你可以做什么。每个tick都实例化变量会导致一些限制..实际上为什么甚至将这些变量存储在内存中?如果可以的话,摆脱iOld和img ......
在函数之外声明并实例化:
myTrackPanelss1.trackBar1.Maximum = _files.Count;
myTrackPanelss1.trackBar1.Minimum = 0;
计时器勾号:
try {
this.pictureBox1.Image = Image.FromFile(_files[_indx].FullName);
timer3.Interval = 40;
_indx++;
}