讲解定时器VB.NET System.Threading类

开发 后端
这里为大家介绍了VB.NET System.Threading有四个重载构造函数,一旦构造函数被调用,你仍然可以通过Change方法改变dueTime和period。

之前我们将了关于定时器System.Windows.Forms.Timer类的讲解,今天我们大家来看和它类似的另一个VB.NET System.Threading 。这个定时器类来自System.Threading名字空间。我愿意说这是所有定时器类中最好的一个,但这会引起误导。举一个例子,我惊讶的发现对于驻留在VB.NET System.Threading名字空间的这个类天生就不是线程安全的。(很明显,这不意味着它不能以线程安全的方式使用)。这个类的可编程接口同其它两个类也不一致,它稍微有点麻烦。

不像我开始描述的两个定时器类,VB.NET System.Threading有四个重载构造函数,就像下面这样:

  1. public Timer(TimerCallback callback, object state, long dueTime, long period);  
  2. public Timer(TimerCallback callback, object state, UInt32 dueTime, UInt32 period);  
  3. public Timer(TimerCallback callback, object state, int dueTime, int period);  
  4. public Timer(TimerCallback callback, object state, TimeSpan dueTime, TimeSpan period); 

第一个参数(callback)要求一个TimerCallback的委托,它指向一个方法,该方法具有下面的结构:

  1. public void TimerCallback(object state);  

第二个参数(state)可以为空或者是包含程序规范信息的对象。在每一个定时器事件被调用时该state对象作为一个参数传递给你的定时回调函数。记住定时回调功能是在一个工作者线程上执行的,所以你必须确保访问state对象的线程安全。
第三个参数(dueTime)让你定义一个引发初始定时器事件的时间。你可指定一个0立即开始定时器或者阻止定时器自动的开始,你可以使用VB.NET System.Threading.Timeout.Infinite常量。
第四个参数(period)让你定义一个回调函数被调用的时间间隔(毫秒)。给该参数定义一个0或者Timeout.Infinite可以阻止后续的定时器事件调用。

一旦构造函数被调用,你仍然可以通过Change方法改变dueTime和period。该方法有下面四种重载形式:

  1. public bool Change(int dueTime, int period);public bool Change(uint dueTime, uint period);  
  2. public bool Change(long dueTime, long period);public bool Change(TimeSpan dueTime, TimeSpan period);  

下面是我在例子程序中用到的开始和停止该定时器的代码:

  1. //Initialize the timer to not start automatically...System.Threading.Timer tmrThreadingTimer = newSystem.Threading.
    Timer(new TimerCallback(tmrThreadingTimer_TimerCallback), null, System.Threading.Timeout.Infinite, 1000);  
  2. //Manually start the timer...tmrThreadingTimer.Change(0, 1000);  
  3. //Manually stop the timer...tmrThreadingTimer.Change(Timeout.Infinte, Timeout.Infinite); 

正如你所期望的那样,通过选择VB.NET System.Threading.Timer类运行例子程序会产生同你看到的System.Timers.Timer类一样的输出结果。因为TimerCallback功能也是在工作者线程上被调用,没有一个跳动被跳过(假设有工作者线程可用)。Figure 5显示了例子程序的输出结果。

不像System.Timers.Timer类,没有与SynchronizingObject相对应的属性被提供。任何请求访问UI控件的操作都必须通过控件的Invoke或BeginInvoke方法被列集

【编辑推荐】

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

2009-10-28 10:23:48

VB.NET定时器

2009-11-03 09:09:19

VB.NET类

2010-01-11 16:04:10

VB.NET使用wit

2009-10-20 10:16:24

VB.NET COMB

2009-10-28 10:42:02

VB.NET定时器编程

2009-10-28 10:58:34

VB.NET定时器事件

2009-10-12 13:54:22

VB.NET Data

2009-10-23 13:10:14

VB.NET List

2009-10-15 11:42:05

VB.Net赋值语句

2009-10-20 09:39:04

VB.NET Butt

2009-10-12 14:32:40

VB.NET实现定时关

2010-01-14 15:44:17

VB.NET数据绑定

2009-10-28 13:24:25

VB.NET文件

2009-11-10 16:20:25

VB.NET全局热键

2009-10-29 11:26:28

VB.NET调用Web

2010-01-18 18:20:49

VB.NET使用API

2009-10-13 14:42:30

VB.NET静态成员

2009-10-14 17:21:47

VB.NET定制Win

2009-11-02 16:30:29

VB.NET构造器

2009-10-13 14:50:59

VB.NET Envi
点赞
收藏

51CTO技术栈公众号