当系统时钟中的秒,分,小时......发生变化时,他们是否可以在C#中执行delegate
或event
,而不使用每毫秒检查一次的计时器该属性已更改并执行该事件,延迟时间最长为一毫秒。
因此我想避免民意调查并在某个时间点击事件。
答案 0 :(得分:7)
如果您的问题是:“如何每隔一分钟/每小时/每小时执行一次代理?”
对于分钟和小时的间隔,您可以在我的答案中执行此SO问题中显示的内容:
这应该相当准确,但不会精确到毫秒。
对于第二个间隔,我会使用一个简单的1秒间隔的Timer。从用户的角度来看,我认为如果动作在xx:xx:xx.000或xx:xx:xx.350执行,则没有太大区别。
答案 1 :(得分:6)
您可以订阅SystemEvents.TimeChanged。系统时钟改变时会触发。
答案 2 :(得分:3)
我通过将间隔设置为(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);