C#Timer考虑回调时间

时间:2017-02-01 14:53:38

标签: c# timer

我想有一个计时器,其间隔考虑回调调用时间。

例如,如果定时器间隔为1000ms,则回调调用大约需要500ms, 然后t0 = 0,t1 = 1500,t2 = 3000。

显然我不想将调用时间(或其平均值)存储在一个字段中,我希望它尽可能完美地工作。

我解决了它,但它看起来很糟糕。

System.Timers.Timer timer = new System.Timers.Timer(1000);
timer.Elapsed += (sender, args) =>
{
    timer.Stop();
    Console.WriteLine(args.SignalTime);
    Thread.Sleep(500); //instead!!!, there is something with Db and logistics.. no really a thread sleep

    timer.Start();
};

timer.Start();

它是唯一的解决方案还是C#中有任何内置功能?

1 个答案:

答案 0 :(得分:2)

您可以使用System.Threading.Timer,其dueTime为1000且无限期:

using System.Threading;

Timer timer = new Timer(callback, null, 1000, Timeout.Infinite);

然后在回调方法结束时,调用timer.Change(1000, Timeout.Infinite),这将导致回调在完成后1000毫秒被调用,无论你的回调执行多长时间。