定时器间隔调用长方法
问题描述:
如果Execute()
需要比如说3000ms完成,但由于定时器间隔每1000ms调用一次,下面的代码会发生什么情况?定时器间隔调用长方法
Timer _timer = new Timer();
private void setupTimer()
{
_timer.Tick += new EventHandler(pollingTimeElapsed);
_timer.Interval = 1000;
_timer.Enabled = true;
_timer.Start();
}
private void pollingTimeElapsed(object sender, EventArgs e)
{
Execute();
}
编辑:我使用System.Windows.Forms.Timer,因为System.Timers.Timer没有.Tick
答
我假设你正在使用的System.Timers.Timer类。
由于AutoReset具有默认值(这是True),因此每经过1000ms就会触发Elapsed事件。
如果您只想触发一次事件,请将AutoReset设置为False。
如果你不想火,而你的执行代码正在运行的情况下,执行以下操作:
Timer _timer = new Timer();
private void setupTimer() {
_timer.Tick += new EventHandler(pollingTimeElapsed);
_timer.Interval = 1000;
_timer.Enabled = true;
_timer.Start();
}
private void pollingTimeElapsed(object sender, EventArgs e) {
try {
_timer.Stop()
Execute();
} finally {
_timer.Start()
}
}
您是否使用System.Timers.Timer或System.Windows.Forms.Timer? – Maarten 2013-04-09 07:19:09
不要怀疑会发生什么!只需停止计时器,执行()并再次启动计时器。 – 2013-04-09 07:20:40
System.Windows.Timer有一个Tick事件,System.Timers.Timer有一个Elapsed事件。 System.Timers.Timer有我的偏好。 – Maarten 2013-04-09 07:23:43