我的C#-programm有一个windows.forms.timer,可以为后台任务激活所有24小时。 在一天中,我将Vista 64bit多次置于待机模式(从不关闭)。 似乎在唤醒后计时器有点重置。
答案 0 :(得分:3)
您的计时器不应设置为每24小时触发一次,应设置为每隔几秒钟或几分钟触发一次,并检查时间。如果时间大于或等于您希望任务发生的时间,请执行任务。
答案 1 :(得分:1)
Timer类在提升Tick事件方面非常放松。在内部,在Windows代码内部,当计时器到期时它只设置一个内部标志,有点类似于“应该提供WM_TIMER”。这实际上并没有发生,直到消息循环不需要做任何重要的事情。任何消息的优先级都高于WM_TIMER。
当Windows窗体消息循环调用GetMessage()时,该函数会检查是否需要返回任何内容。如果答案是“无”并且设置了标志,则它提供WM_TIMER。你会得到Tick事件。
由此产生的一些后果:您永远不会使用Tick事件来跟踪时间。那将不可避免地落后。您永远不会连续两次获得Tick事件,它不会赶上。但是与你的问题相关:当机器进入待机状态时,消息循环不会被泵送,没有什么特别的事情发生。
答案 2 :(得分:0)
在待机状态下,通常存储器按原样存储,然后在唤醒机器时调用,这可能导致计时器在待机期间不打勾,或者根据您的意图行为不准确。