讲解定时器VB.NET System.Threading类
之前我们将了关于定时器System.Windows.Forms.Timer类的讲解,今天我们大家来看和它类似的另一个VB.NET System.Threading 。这个定时器类来自System.Threading名字空间。我愿意说这是所有定时器类中最好的一个,但这会引起误导。举一个例子,我惊讶的发现对于驻留在VB.NET System.Threading名字空间的这个类天生就不是线程安全的。(很明显,这不意味着它不能以线程安全的方式使用)。这个类的可编程接口同其它两个类也不一致,它稍微有点麻烦。 不像我开始描述的两个定时器类,VB.NET System.Threading有四个重载构造函数,就像下面这样: public Timer(TimerCallback callback,object state,long dueTime,long period); public Timer(TimerCallback callback,UInt32 dueTime,UInt32 period); public Timer(TimerCallback callback,int dueTime,int period); public Timer(TimerCallback callback,TimeSpan dueTime,TimeSpan period); 第一个参数(callback)要求一个TimerCallback的委托,它指向一个方法,该方法具有下面的结构: public void TimerCallback(object state); 第二个参数(state)可以为空或者是包含程序规范信息的对象。在每一个定时器事件被调用时该state对象作为一个参数传递给你的定时回调函数。记住定时回调功能是在一个工作者线程上执行的,所以你必须确保访问state对象的线程安全。 一旦构造函数被调用,你仍然可以通过Change方法改变dueTime和period。该方法有下面四种重载形式: public bool Change(int dueTime,int period);public bool Change(uint dueTime,uint period); public bool Change(long dueTime,long period);public bool Change(TimeSpan dueTime,TimeSpan period); 下面是我在例子程序中用到的开始和停止该定时器的代码: //Initialize the timer to not start automatically...System.Threading.Timer tmrThreadingTimer = newSystem.Threading.Timer(new TimerCallback(tmrThreadingTimer_TimerCallback),null,System.Threading.Timeout.Infinite,1000); //Manually start the timer...tmrThreadingTimer.Change(0,1000); //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方法被列集
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |