C#计时器每X秒触发一次,但与实时保持同步(即没有漂移)

C#中是否有.NET Timer可以确保事件之间没有“漂移”? 也就是说,如果您将计时器设置为每X秒关闭一次,那么在操作几天之后它就不会漂移,即确保一天中接近X秒事件的数量与它应该保持同步?

如果没有,是否有一个众所周知的代码示例将C#中的Timer函数包装起来执行此操作?

很抱歉只给你一个链接到quartz.net ,但这是一个完全合格的企业,经过测试的…库……你不需要重新发明轮子:)

如果您担心开销,您对开销的定义是什么? 是文件大小(二进制文件大约是0.5mb)还是逻辑中的开销。 对于逻辑部分:我认为实现他们的IJob可以很好地强制更好的消费者代码。 我不是内联方法的大朋友(就像一个例子,因为你可能会在计时器过去时发出指针) – 类会给你更多的可能性,并再一次强迫更好的oop,域设计,… 。

但是:用quartz.net做Console.WriteLine(...)会有点过分…… 🙂

我假设你已经尝试了一些东西,它漂移了。

如果你想要从小时开始每5秒发射一次(5,10,15,20 ..),你可以将你的计时器设置为触发一次,然后在你的回调中,重置计时器以在DateTime.Now +时触发。到下一个5秒间隔的秒数。

只要你的时钟正确,这就可以防止任何漂移。

像这样的东西

 System.Timers.Timer timer = new Timer(); void Init() { timer.Elapsed += timer_Elapsed; int wait = 5 - (DateTime.Now.Second % 5); timer.Interval = wait*1000; timer.Start(); } void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { timer.Stop(); int wait = DateTime.Now.Second % 5; timer.Interval = wait * 1000; timer.Start(); }