2012-07-24 56 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