我想有一个计时器,其间隔考虑回调调用时间。
例如,如果定时器间隔为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#中有任何内置功能?
答案 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毫秒被调用,无论你的回调执行多长时间。