.NET Timer 控件在窗口最小化时运行得更快

Posted

技术标签:

【中文标题】.NET Timer 控件在窗口最小化时运行得更快【英文标题】:.NET Timer controls run faster while the window is minimized 【发布时间】:2011-01-11 03:02:30 【问题描述】:

这实际上是我见过但无法解释的明显差异。这些计时器的间隔设置为 1 毫秒(可用的最低值),但是虽然它已最小化,但它似乎跳得更快?谁能向我解释这种现象?如果可能,请解释如何在窗口最大化时重现效果?

【问题讨论】:

顺便说一句,你知道这是一个 .NET Timer 控件而不是 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 控件在窗口最小化时运行得更快的主要内容,如果未能解决你的问题,请参考以下文章

无窗口插件1

C#中winform的timer控件定时弹窗后,会弹出多个同样的窗口?

在运行时将一个窗口的控件替换为另一个

【C#】WinForm中如何让窗口最小化时直接最小化到托盘,后台运行

winform中如何使用timer控件实现欢迎(初始加载)窗口

为啥从标准模块(而不是用户窗体)调用 VBA 代码时运行得更快?