C# windows系统时间从NTP时间更新更改时是否发生事件?
我希望在我的C#应用程序中更改Windows系统日期/时间时收到通知。我发现了该事件,MSDN文档中显示: 当用户更改系统时钟上的时间时发生 如果NTP更改时钟,是否也会触发此事件?或者我可以订阅其他活动吗 实施细节: 我想要一个计时器。在特定日期/时间触发已用事件。我的代码计算计时器所需的时间间隔。如果系统时间发生变化,则需要重新评估此计算,以计算出新的间隔并更新计时器 答案摘要 谢谢你的评论。我将其总结如下,以供将来参考:C# windows系统时间从NTP时间更新更改时是否发生事件?,c#,windows,datetime,C#,Windows,Datetime,我希望在我的C#应用程序中更改Windows系统日期/时间时收到通知。我发现了该事件,MSDN文档中显示: 当用户更改系统时钟上的时间时发生 如果NTP更改时钟,是否也会触发此事件?或者我可以订阅其他活动吗 实施细节: 我想要一个计时器。在特定日期/时间触发已用事件。我的代码计算计时器所需的时间间隔。如果系统时间发生变化,则需要重新评估此计算,以计算出新的间隔并更新计时器 答案摘要 谢谢你的评论。我将其总结如下,以供将来参考: SystemEvents.TimeChanged在用户更改以及系统
- SystemEvents.TimeChanged在用户更改以及系统调用与NTP服务器重新同步时激发
- 如果在windows服务中运行,则需要处理消息泵以获取TimeChanged事件。这可以通过运行调度器来实现
- NTP服务器不应用离散的系统日期更改。考虑到计算的时钟漂移和本地时钟与其他NTP服务器之间的偏移,逐步应用NTP时钟调整
- 对于我的实现,最好定期评估计时器间隔,以考虑任何系统时间变化,而不是只设置一次时间间隔,然后让它触发
TimeChanged
在您将Windows配置为使用NTP服务器保持时间最新以及有人手动更改时间时引发
这里需要注意的一点是,您必须有一个UI。(或启动一个隐藏窗口以获取消息)。也就是说,您无法在Windows服务中获取TimeChanged事件。是的,
TimeChanged
在您将Windows配置为使用NTP服务器使时间保持最新以及有人手动更改时间时引发
这里需要注意的一点是,您必须有一个UI。(或启动一个隐藏窗口以获取消息)。也就是说,您无法在Windows服务中获得TimeChanged事件。WM_TIMECHANGE-谢谢@StuartDunkeld,我刚刚在Reflector中查看了SystemEvents,TimeChanged事件在内部使用WindowProc本机方法。这是否意味着任何时间更改事件都将调用SystemEvents.TimeChanged?如果您希望每次NTP服务器调整时间时都有一个事件,我怀疑您是否会得到一个事件。考虑到计算的时钟漂移和本地时钟与其他NTP服务器之间的偏移量,NTP通过减慢或加快时钟来连续调整时钟。这些调整不是离散的跳跃,而是回转。谢谢你,塞拉达。这是否意味着使用上述实现是安全的?或者我应该定期重新评估下一个间隔以获得更高的精度?NTP时钟调整是逐渐应用的,通常以每时钟中断100纳秒的速率进行。它可以补偿闰秒和时钟漂移,而不会打乱依赖于时钟稳定前进的进程。有关详细信息,请参阅GetSystemTimeAdjustment()的MSDN文章。WM_TIMECHANGE-谢谢@StuartDunkeld,我刚刚在Reflector中查看了SystemEvents,TimeChanged事件在内部使用WindowProc本机方法。这是否意味着任何时间更改事件都将调用SystemEvents.TimeChanged?如果您希望每次NTP服务器调整时间时都有一个事件,我怀疑您是否会得到一个事件。考虑到计算的时钟漂移和本地时钟与其他NTP服务器之间的偏移量,NTP通过减慢或加快时钟来连续调整时钟。这些调整不是离散的跳跃,而是回转。谢谢你,塞拉达。这是否意味着使用上述实现是安全的?或者我应该定期重新评估下一个间隔以获得更高的精度?NTP时钟调整是逐渐应用的,通常以每时钟中断100纳秒的速率进行。它可以补偿闰秒和时钟漂移,而不会打乱依赖于时钟稳定前进的进程。有关详细信息,请参阅GetSystemTimeAdjustment()的MSDN文章。谢谢。在从命令行运行“w32tm/resync”时,我能够跳转到事件处理程序中,这是个好兆头。关于警告的好提示。如果我创建了一个dispatcher并运行它,我应该能够在Windows服务中获取事件,不是吗?谢谢。在从命令行运行“w32tm/resync”时,我能够跳转到事件处理程序中,这是个好兆头。关于警告的好提示。如果我创建一个调度程序并运行它,我应该能够在Windows服务中获取事件,不是吗?