当系统时钟中的秒、分、小时……发生变化时,他们是在 C# 中执行 adelegate
或的一种方式event
,而不使用每毫秒检查属性是否已更改并以最大延迟执行事件的计时器一毫秒。
因此,我想避免轮询并在特定时间触发事件。
如果您的问题是:“我如何每整秒/分钟/小时执行一次委托?”
对于分钟和小时间隔,您可以执行我在此 SO 问题中的回答中所示的操作:
这应该是相当准确的,但不会精确到毫秒。
对于第二个间隔,我会使用一个简单的 1 秒间隔的计时器。从用户的角度来看,我认为如果操作在 xx:xx:xx.000 或 xx:xx:xx.350 执行,差别不大。
您可以订阅SystemEvents.TimeChanged。当系统时钟改变时触发。
我通过将间隔设置为 (1000 - DateTime.Now.Millisecond) 在表单应用程序中解决了这个问题
_timer1 = new System.Windows.Forms.Timer();
_timer1.Interval = (1000 - DateTime.Now.Millisecond);
_timer1.Enabled = true;
_timer1.Tick += new EventHandler(updateDisplayedTime);
并在事件处理程序中重置间隔以防止漂移。
<handle event>
_timer1.Interval = (1000 - DateTime.Now.Millisecond);