我有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轮的另一轮。
答案 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)
停止计时器,设置间隔然后重新启动计时器。 我希望它能起作用