为什么在使用计时器在pictureBox1中播放图像时播放速度变慢?

时间:2016-12-25 03:42:04

标签: c# .net winforms

第一次点击按钮时,它会快速显示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区间那样快速地显示它们,然后在某些时候它会变慢。我无法弄清楚为什么它会变慢。

1 个答案:

答案 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++;
}