定时器 - 不要重新运行,直到前一个完成

时间:2014-09-28 13:34:23

标签: c# timer

我有一个Timer我每隔10秒就会运行一次,将我应用中的本地数据同步回服务器。

public Timer syncTimer;
syncTimer = new Timer((o) =>
    { 
        this.syncToServer();

    }, null, 0, 10000);

我遇到一个问题,如果我的syncToServer执行时间超过10秒,它会自行跳过。我正在考虑执行以下操作以在执行时暂停计时器,然后在完成后重新启动它:

public Timer syncTimer;
syncTimer = new Timer((o) =>
    { 
        syncTimer.Change(Timeout.Infinite , Timeout.Infinite); //Stop the timer
        this.syncToServer();
        syncTimer.Change(10000 , 10000); //Restart the timer
    }, null, 0, 10000);

这是实现我目标的最佳途径还是有更好的方法可以阻止它同时执行?

1 个答案:

答案 0 :(得分:1)

也许你可以使用System.Timers.Timer,它比System.Threading.Timer更容易理解。

var timer = new System.Timers.Timer(1000);
timer.AutoReset = false;
timer.Elapsed += (sender, e) => {
    this.syncToServer();
    // maybe Thread.Sleep(100000);
    timer.Start();
};
timer.Start();

愿它有所帮助。