Getting a system-clock-change-tick in C#

眉间皱痕 提交于 2019-12-22 05:59:09

问题


Is their a way to execute a delegate or event in C# when the seconds, minutes, hours,... change in the system-clock, without using a timer that checks every millisecond if the property has changed and executes the event with a delay of maximum a millisecond.

I thus want to avoid polling and fire an event at a certain time.


回答1:


If your question is: "How do I execute a delegate every full second/minute/hour?"

For minute and hour intervals, you could do something like shown in my answer in this SO question:

  • How to generate event on a specific time of clock in C#?

This should be fairly accurate, but won't be exact to the millisecond.

For second intervals, I'd go with a Timer with a simple 1-second-interval. From a user's perspective I think there's not a lot of difference if the action executes at xx:xx:xx.000 or at xx:xx:xx.350.




回答2:


You can subscribe to SystemEvents.TimeChanged. This fires when the system clock is altered.




回答3:


I solved this in a forms app by setting the interval to (1000 - DateTime.Now.Millisecond)

        _timer1 = new System.Windows.Forms.Timer();
        _timer1.Interval = (1000 - DateTime.Now.Millisecond);
        _timer1.Enabled = true;
        _timer1.Tick += new EventHandler(updateDisplayedTime);

and in the event handler reset the interval to prevent drift.

        <handle event>
        _timer1.Interval = (1000 - DateTime.Now.Millisecond);


来源:https://stackoverflow.com/questions/1434005/getting-a-system-clock-change-tick-in-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!