2012-07-24 57 views
3

我有定時器3蜱事件內部i中TIMER3間隔設置爲的NumericUpDown值:如何根據numericupdown值實時更改計時器間隔?

private void timer3_Tick(object sender, EventArgs e) 
     { 
      try 
      { 
       Image iOLd = this.pictureBox1.Image; 
       Image img = Image.FromFile(_files[_indx].FullName); 
       trackBar1.Value = _indx; 
       label23.Text = _files[_indx].Name; 
       this.pictureBox1.Image = img; 

       if (iOLd != null) 
        iOLd.Dispose(); 
       _indx++; 

       if (_indx >= _files.Count) 
       { 
        _indx = 0; 
        trackBar1.Value = 0; 
       } 
       timer3.Interval = Convert.ToInt32(numericUpDown1.Value); 
      } 
      catch 
      { 

      } 
     } 

我也做了它在的NumericUpDown ValueChanged事件:

private void numericUpDown1_ValueChanged(object sender, EventArgs e) 
     { 
      timer3.Interval = Convert.ToInt32(numericUpDown1.Value); 
     } 

的問題是例如我設置numericupdown值,而程序運行到10000,它的移動速度非常慢,然後我立即將值設置爲1,因此,當我將其更改爲1時,timer3間隔生效,它等待另一個10000值的循環,然後timer3間隔正在作爲值1.

我想要做的是,當我將從1萬變爲1的數值下降時,它將立即改變,而不是等待另一輪10000值。

回答

11

假設您正在使用Windows.Forms.Timer,那麼您需要在更改間隔之前停止Timer,然後重新啓動它。

timer3.Stop(); 
timer3.Interval = Convert.ToInt32(numericUpDown1.Value); 
timer3.Start(); 

從MSDN

調用start已通過調用停止將導致定時器重啓被中斷的間隔禁用的計時器之後。如果您的計時器設置爲5000毫秒間隔,並且在3000毫秒左右的時間內調用停止,則調用開始將導致計時器等待5000毫秒,然後引發滴答事件。

+0

我看到答案的文本中有錯誤。這是一個Windows.Forms.Timer – Steve 2015-07-07 21:16:00

1

您必須停止定時器,設置時間間隔,然後重新啓動它。

timer3.Enabled = false; 
timer3.Interval = ...; 
timer3.Enabled = true; 

有.NET Framework中的幾個定時器實現,因此,如果您使用的不是我這裏使用的(System.Timers.Timer)不同的定時器,你必須調用停止()和start()方法,而不是設置爲已啓用。

-1

停止定時器,設置時間間隔,然後重新啓動定時器。 我希望它能工作

+0

我做到了,但我不明白爲什麼這個流?如果我不這樣做會發生什麼?! – 2016-06-28 14:56:35