当windows系统时间从NTP时间更新更改时,是否发生事件



我想在C#应用程序中更改Windows系统日期/时间时得到通知。我发现了SystemEvents.TimeChanged事件,MSDN文档中说:

当用户更改系统时钟上的时间时发生。

如果NTP更改了时钟,是否也会触发此事件?或者还有其他活动我可以订阅吗?

实施细节:

我想要一个计时器。在特定日期/时间激发的已过事件。我的代码计算计时器所需的间隔。如果系统时间发生变化,则需要重新评估此计算,以计算出新的间隔并更新计时器。

答案摘要

谢谢大家的评论。我在下面总结了它们以供将来参考:

  • SystemEvents.TimeChanged在用户更改以及系统调用与NTP服务器重新同步时触发
  • 如果在windows服务中运行,则需要处理消息泵以获取TimeChanged事件。这可以通过运行调度程序来实现
  • NTP服务器不应用离散的系统日期更改。NTP时钟调整是逐渐应用的,考虑到计算的时钟漂移以及本地时钟与其他NTP服务器之间的偏移
  • 对于我的实现,最好定期评估计时器间隔,以考虑任何系统时间变化,而不是设置一次间隔并让它启动

是的,当您将Windows配置为使用NTP服务器来保持时间最新时,以及当有人手动更改时间时,会引发TimeChanged

这里需要注意的一点是,您必须有一个UI。(或者启动一个隐藏窗口来获取消息泵)。也就是说,您无法在Windows服务中获得TimeChanged事件。

最新更新