2

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

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

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

实施细节:

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

答案摘要

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

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

1 回答 1

4

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

这里的一个警告是你必须有一个 UI。(或启动一个隐藏窗口来获取消息泵)。即,您无法在 Windows 服务中获得 TimeChanged 事件。

于 2012-08-20T23:37:58.617 回答