如何根据numericupdown值实时更改定时器间隔?

时间:2012-07-24 07:21:07

标签: c#

我有Timer3 tick事件,我将timer3间隔设置为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);
        }

问题是例如我在程序运行到10000时设置了numericupdown值并且它的移动速度非常慢然后我立即将值设置为1,所以相反,timer3间隔生效一旦我将其更改为1等待对于10000值的另一个周期,则timer3间隔作为值1。

我想要做的是当我将数字套装从10000更改为1时,它将立即改变,而不是等待10000轮的另一轮。

3 个答案:

答案 0 :(得分:14)

假设您使用的是Windows.Forms.Timer,则需要在更改间隔之前停止Timer,然后重新启动它。

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

来自MSDN

  

通过调用Stop禁用定时器后调用Start将导致Timer重新启动中断的间隔。如果您的Timer设置为5000毫秒间隔,并且您在大约3000毫秒内调用Stop,则调用Start将导致Timer在提升Tick事件之前等待5000毫秒。

答案 1 :(得分:1)

您必须停止计时器,设置间隔,然后重新启动它。

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

.NET框架中有几个计时器实现,因此如果您使用的计时器与我在此处使用的计时器不同(System.Timers.Timer),则必须调用Stop()和Start()方法,而不是设置Enabled。

答案 2 :(得分:0)

停止计时器,设置间隔然后重新启动计时器。 我希望它能起作用