我想在我的 C# 应用程序中更改 Windows 系统日期/时间时收到通知。我找到了SystemEvents.TimeChanged事件,MSDN 文档说:
当用户更改系统时钟的时间时发生。
如果 NTP 更改时钟,此事件是否也会被触发?或者我可以订阅其他活动吗?
实施细节:
我想要一个 timer.Elapsed 事件在特定日期/时间触发。我的代码计算用于计时器所需的时间间隔。如果系统时间发生变化,则需要重新评估此计算以计算出新的时间间隔并更新计时器。
答案摘要
感谢所有的评论。我在下面总结了它们以供将来参考:
- SystemEvents.TimeChanged 在用户更改和系统调用与 NTP 服务器重新同步时触发
- 如果在 Windows 服务中运行,则需要处理消息泵以获取 TimeChanged 事件。这可以通过运行调度程序来实现。
- NTP 服务器不应用离散的系统日期更改。逐步应用 NTP 时钟调整,考虑到计算的时钟漂移以及本地时钟与其他 NTP 服务器之间的偏移
- 对于我的实现,最好定期评估计时器间隔以考虑任何系统时间更改,而不是设置一次间隔并让它触发。