.NET Timer是否比VB6 Timer更可靠

时间:2011-08-18 10:23:52

标签: .net vb.net timer vb6-migration

在VB6过去的好时光中,您不能依赖计时器控件以指定的间隔进行触发。如果你的程序正在进行一些强烈的处理,那么Timer_Tick事件会被推送到堆栈上,只有当它到达指令时才会被处理,这可能会在几秒钟之后(?)。

所以我的问题是 - 是否已经改进了.NET计时器控件,以便可以依赖于指定的时间间隔进行触发?我猜以上仍然适用不是吗?但它是否比VB6版本更好

是否有使用计时器控件的替代方法,以确保在指定的时间间隔后触发事件?

2 个答案:

答案 0 :(得分:4)

System.Windows.Forms.Timer在UI线程上运行并依赖于消息泵;它的工作方式基本上与VB6计时器相同。

但.NET还有其他计时器 - System.Threading.TimerSystem.Timers.Timer在多线程环境中使用工作线程。

哪个“更好”取决于您的要求 - 使用多线程计时器可能会在请求的时间间隔内更多地触发,但这是以使用线程所固有的额外复杂性为代价的。

答案 1 :(得分:0)

Timers的问题在于它在某种意义上依赖于操作系统。计时器的工作必须由操作系统安排,如果还有另一个高优先级的进程耗费了大量的处理能力,那么它可能会决定安排你的代码在以后的时间运行,为另一个更重要的工作线提供更多的时间。进展。

在大多数情况下,较新的计时器可能更可靠,但它们只能像子系统一样可靠。我不确定Windows是否实现了硬件计时器(它更可靠),或者如果.NET VB使用它,但是从过去我使用过的程序看起来似乎很受欢迎。大部分时间它几乎都在很小的范围内死亡,而在其他时候我看到它在某些条件下会延迟一秒钟。

我的建议是不要使用睡眠而是使用计时器而你应该没有太多问题。

P.S:它以相对困难的时间间隔发生,通常会有几毫秒的差异,所以你不应该依赖非常精确的Timer粒度。