2016-12-25 49 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++; 
} 
相關問題