.NET Timer 控件在窗口最小化时运行得更快
Posted
技术标签:
【中文标题】.NET Timer 控件在窗口最小化时运行得更快【英文标题】:.NET Timer controls run faster while the window is minimized 【发布时间】:2011-01-11 03:02:30 【问题描述】:这实际上是我见过但无法解释的明显差异。这些计时器的间隔设置为 1 毫秒(可用的最低值),但是虽然它已最小化,但它似乎跳得更快?谁能向我解释这种现象?如果可能,请解释如何在窗口最大化时重现效果?
【问题讨论】:
顺便说一句,你知道这是一个 .NETTimer
控件而不是 C# 吗? VB.NET、F#等中的相同控件
对不起,我在暗示我使用的语言是 C#。我只是碰巧尴尬地订购了它。
【参考方案1】:
这是Forms.Timer
吗?
我怀疑它运行得更快,更有可能以更及时的方式处理 Timer 触发事件。在最小化的同时,表单窗口的消息泵处理的消息可能会更少,这可能会占用更大的时间片来处理 Timer 消息。还有定时器最小分辨率的问题。
如果适用,请尝试使用其他 Timer 类型之一,例如 System.Timers
Windows 窗体计时器组件是 单线程,并且仅限于 精度为 55 毫秒。如果你 需要一个多线程计时器 更高的准确性,使用 Timer 类 在 System.Timers 命名空间中。
Ref.
【讨论】:
【参考方案2】:如果我没记错的话,你可以从System.Windows.Forms.Timer
(我假设你在这里使用的)中获得的最小分辨率是 55 毫秒。将其设置为 1 毫秒本质上意味着它会连续滴答。
当然,计时器并不能保证滴答声会在指定的时间间隔内准确到达。如果你的应用正忙于做其他事情(比如重绘屏幕),那么它可能需要更多的毫秒,或者在重负载下显着更多。如果计时器设置为 1 秒的间隔,您不会真正注意到这一点,但在最小窗口(55 毫秒)时,您可能会注意到。
当应用程序被最小化时,可以在定时器事件触发之前中断它们的其他事件就更少了。
【讨论】:
+1 来自我。你的记性比我的好,我得查一下定时器的间隔!以上是关于.NET Timer 控件在窗口最小化时运行得更快的主要内容,如果未能解决你的问题,请参考以下文章
C#中winform的timer控件定时弹窗后,会弹出多个同样的窗口?
【C#】WinForm中如何让窗口最小化时直接最小化到托盘,后台运行