Threading.Timer类对在单独线程中定期运行任务十分有用。例如,可以使用线程计时器检查数据库的状态和完整性,或者备份重要文件。以下示例每两秒钟启动一个任务,并使用标志来启动使计时器停止的Dispose方法。本例将状态发送到输出窗口,因此在测试代码之前,应按CONTROL+ALT+O键以使此窗口可见。
ClassStateObjClass'用于保留调用TimerTask所需的参数
PublicSomeValueAsInteger
PublicTimerReferenceAsSystem.Threading.Timer
PublicTimerCanceledAsBooleanEndClassSubRunTimer()
DimStateObjAsNewStateObjClass()
StateObj.TimerCanceled=False
StateObj.SomeValue=1
DimTimerDelegateAsNewThreading.TimerCallback(AddressOfTimerTask) '创建每隔2秒钟调用过程的计时器。
'注意:这里没有Start方法;创建实例之后, '计时器就开始运行。
DimTimerItemAsNewSystem.Threading.Timer(TimerDelegate,StateObj,_2000,2000)
StateObj.TimerReference=TimerItem '为Dispose保存一个引用。
WhileStateObj.SomeValue<10'运行10个循环。
System.Threading.Thread.Sleep(1000) '等待1秒钟。
EndWhile
StateObj.TimerCanceled=True '请求计时器对象的Dispose。
End
SubSubTimerTask(ByValStateObjAsObject)
DimStateAsStateObjClass=CType(StateObj,StateObjClass)
DimxAsInteger '使用Interlocked类递增计数器变量。
System.Threading.Interlocked.Increment(State.SomeValue)
Debug.WriteLine("已启动了新线程"&Now)
IfState.TimerCanceledThen '已请求Dispose。
State.TimerReference.Dispose()
Debug.WriteLine("完成时间"&Now)
End
IfEndSub
当System.Windows.Forms.Timer类不可用时(例如在开发控制台应用程序时),线程计时器特别有用。