讲解VB.NET定时器中System.Timers.Timer类

开发 后端
这里为你介绍了除了标准的EventArgs成员,ElapsedEventArgs类暴露了一个公共的SignalTime属性,它包含了一个精确的VB.NET定时器时间片消失的时间。

在向大家详细介绍VB.NET定时器 之前,首先让大家了解下VB.NET,然后全面介绍 System.Timers.Timer 。VB.NET框架文档指出System.Timers.Timer类是一个VB.NET定时器中服务定时器,是为多线程环境进行设计和优化。该定时器类的实例能够被多个线程安全地访问。不像System.Windows.Forms.Timer,System.Timers.Timer缺省的,将在一个工作者线程上调用你的定时器事件处理函数,该工作者线程是从公共语言运行时(CLR)线程池中获得。这意味着在你的逝去的时间处理函数代码中必须遵从Win32编程的黄金规则:除了创建该控件实例的线程之外,一个控件的实例从来不被任何其它的线程所访问。

VB.NET System.Timers.Timer提供了一个简单的方法处理这样的困境——暴露一个公共的SynchronizingObject属性。把该属性设置为一个窗体实例(或者窗体上的一个控件)将保证你的事件处理函数代码运行在SynchronizingObject被实例化的同一个线程里。

如果你使用了Visual Studio .NET工具箱,Visual Studio .NET自动的设置SynchronizingObject属性为当前的窗体实例。首先它设定该定时器的SynchronizingObject属性使其在功能上同System.Windows.Forms.Timer类一样。对于大部分功能,的确是这样。当操作系统通知System.Timers.Timer类所允许的定时时间已过去,定时器使用SynchronizingObject.Begin.Invoke方法在一个线程上去执行事件委托,该线程是创建SynchronizingObject的线程。事件处理函数将被阻塞直到UI线程能够处理它。然而不像System.Windows.Forms.Timer类一样,该事件最终仍然能够被引发。像你在Figure 2中看到的,当UI线程不能够处理时System.Windows.Forms.Timer不会引发事件,可是当UI线程可用时System.Timers.Timer却会排队等候处理。

正如我早先提到的,VB.NET System.Timers.Timer类成员非常类似与System.Windows.Forms.Timer。最大的区别就在与System.Timers.Timer类是对Win32可等待定时对象的一个包装,并在工作者线程上产生一个时间片消失事件而不是在UI线程上产生一个时间标记事件。时间片消失事件必须与一个同ElapsedEventHandler委托像匹配的事件处理函数相连接。事件处理函数接受一个ElapsedEventArgs类型的参数。

除了标准的EventArgs成员,ElapsedEventArgs类暴露了一个公共的SignalTime属性,它包含了一个精确的VB.NET定时器时间片消失的时间。因为这个类支持不同线程的访问,除了时间消失事件所在的线程,应该相信它的Stop方法能够被其它线程所调用。这会潜在的导致消失事件被引发即使其Stop方法已经被调用。你可以把SignalTime和Stop方法调用的时间进行比较来解决这个问题。

System.Timers.Timer也提供了AutoReset属性来决定当时间片消失事件引发后是继续进行还是只这一次。要记住在定时器开始后重设间隔属性会导致当前计数为0。比如,设置了一个5秒的间隔,在间隔被改变为10秒时3秒已经过去了,那么下一个定时器事件将会在上一个定时器事件13秒后发生。

【编辑推荐】

  1. 实例讲述VB.NET使用Log4Net
  2. 三分钟学会VB.NET转换形态
  3. VB.NET获取硬盘信息四大法宝
  4. 讲述VB.NET调用Excel的好处
  5. 简单例子概述VB.NET新窗体
责任编辑:田树 来源: 赛迪网
相关推荐

2009-10-28 10:31:59

VB.NET Syst

2009-10-28 10:42:02

VB.NET定时器编程

2009-11-03 09:09:19

VB.NET类

2009-10-20 10:16:24

VB.NET COMB

2010-01-11 16:04:10

VB.NET使用wit

2010-01-22 15:25:46

VB.NET Time

2009-10-28 10:58:34

VB.NET定时器事件

2009-10-12 14:32:40

VB.NET实现定时关

2009-10-23 13:10:14

VB.NET List

2009-10-12 13:54:22

VB.NET Data

2009-10-15 11:42:05

VB.Net赋值语句

2009-10-14 17:21:47

VB.NET定制Win

2010-01-18 18:20:49

VB.NET使用API

2009-10-13 14:42:30

VB.NET静态成员

2009-11-02 16:30:29

VB.NET构造器

2010-01-12 16:20:44

VB.NET类

2009-10-13 14:50:59

VB.NET Envi

2009-10-20 17:38:54

VB.NET Comp

2009-10-20 09:39:04

VB.NET Butt

2009-10-27 15:21:45

VB.NET文件处理
点赞
收藏

51CTO技术栈公众号