2016-12-25 55 views
0

第一次点击按钮时,它会快速显示pictureBox1中的图像。但是在一些图像之后它变得非常缓慢。 它像慢动作模式一样慢慢地显示图像。为什么使用计时器播放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记号事件:

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

我建议去掉空'catch'块。可能不是当前问题的一部分,但是如果你在某个地方发现异常,那么因为你只是在吃东西而不知道它。 –

+1

看着你的计时器间隔,你每40毫秒触发计时器的滴答事件。由于每秒发送一个太多的请求,因此您可能会变慢。在计时器的滴答事件中,您正在构建来自文件的图像对象,当您的图像驻留在磁盘上时,该对象可能会变慢。 – Hakunamatata

+0

删除了try/catch我也将trackbar1的最大和最小行移动到按钮单击事件,并且timer3 interval = 40将它移动到按钮单击事件。但仍然遇到问题。 –

回答

0

声明你可以在定时器之外进行操作。为每个滴答实例化变量会导致一些油门..实际上为什么甚至将这些变量存储在内存中?摆脱IOLD如果你能IMG的...

申报和功能外实例:

myTrackPanelss1.trackBar1.Maximum = _files.Count; 
    myTrackPanelss1.trackBar1.Minimum = 0; 

计时器滴答:

try { 
     this.pictureBox1.Image = Image.FromFile(_files[_indx].FullName); 
     timer3.Interval = 40; 
     _indx++; 
} 
相关问题