在VB6过去的好时光中,您不能依赖计时器控件以指定的间隔进行触发。如果你的程序正在进行一些强烈的处理,那么Timer_Tick事件会被推送到堆栈上,只有当它到达指令时才会被处理,这可能会在几秒钟之后(?)。
所以我的问题是 - 是否已经改进了.NET计时器控件,以便可以依赖于指定的时间间隔进行触发?我猜以上仍然适用不是吗?但它是否比VB6版本更好?
是否有使用计时器控件的替代方法,以确保在指定的时间间隔后触发事件?
答案 0 :(得分:4)
System.Windows.Forms.Timer
在UI线程上运行并依赖于消息泵;它的工作方式基本上与VB6计时器相同。
但.NET还有其他计时器 - System.Threading.Timer
,System.Timers.Timer
在多线程环境中使用工作线程。
哪个“更好”取决于您的要求 - 使用多线程计时器可能会在请求的时间间隔内更多地触发,但这是以使用线程所固有的额外复杂性为代价的。
答案 1 :(得分:0)
Timers的问题在于它在某种意义上依赖于操作系统。计时器的工作必须由操作系统安排,如果还有另一个高优先级的进程耗费了大量的处理能力,那么它可能会决定安排你的代码在以后的时间运行,为另一个更重要的工作线提供更多的时间。进展。
在大多数情况下,较新的计时器可能更可靠,但它们只能像子系统一样可靠。我不确定Windows是否实现了硬件计时器(它更可靠),或者如果.NET VB使用它,但是从过去我使用过的程序看起来似乎很受欢迎。大部分时间它几乎都在很小的范围内死亡,而在其他时候我看到它在某些条件下会延迟一秒钟。
我的建议是不要使用睡眠而是使用计时器而你应该没有太多问题。
P.S:它以相对困难的时间间隔发生,通常会有几毫秒的差异,所以你不应该依赖非常精确的Timer粒度。