定时器间隔调用长方法

本文关键字:方法 调用 定时器 | 更新日期: 2023-09-27 18:08:16

如果Execute()需要3000毫秒才能完成,但是由于计时器间隔每1000毫秒调用一次,那么下面的代码会发生什么情况?

        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 .Timer .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()
    }
}