8

我在里面有 Timer3 滴答事件,我将 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);
        }

问题是,例如,我在程序运行时将 numericupdown 值设置为 10000,并且它的移动速度非常慢,然后我立即将值设置为 1,因此当我将其更改为 1 时,timer3 间隔就会生效,它正在等待另一个周期10000 的值,则 timer3 间隔充当值 1。

我想要做的是,当我将 numericupdown 从 10000 更改为 1 时,它会立即更改,而不是等待另一轮 10000 值。

4

3 回答 3

18

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

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

来自 MSDN

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

于 2012-07-24T07:26:04.713 回答
4

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

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

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

于 2012-07-24T07:24:23.917 回答
0

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

于 2012-07-24T07:26:45.187 回答