Threading.Timer類對在單獨線程中定期運行任務十分有用。例如,可以使用線程計時器檢查數(shù)據(jù)庫的狀態(tài)和完整性,或者備份重要文件。以下示例每兩秒鐘啟動一個任務,并使用標志來啟動使計時器停止的Dispose方法。本例將狀態(tài)發(fā)送到輸出窗口,因此在測試代碼之前,加入收藏 應按CONTROL+ALT+O鍵以使此窗口可見。
ClassStateObjClass'用于保留調(diào)用TimerTask所需的參數(shù)
PublicSomeValueAsInteger
PublicTimerReferenceAsSystem.Threading.Timer
PublicTimerCanceledAsBooleanEndClassSubRunTimer()
DimStateObjAsNewStateObjClass()
StateObj.TimerCanceled=False
StateObj.SomeValue=1
DimTimerDelegateAsNewThreading.TimerCallback(AddressOfTimerTask) '創(chuàng)建每隔2秒鐘調(diào)用過程的計時器。
'注意:這里沒有Start方法;創(chuàng)建實例之后, '計時器就開始運行。
DimTimerItemAsNewSystem.Threading.Timer(TimerDelegate,StateObj,_2000,2000)
StateObj.TimerReference=TimerItem '為Dispose保存一個引用。
WhileStateObj.SomeValue<10'運行10個循環(huán)。
System.Threading.Thread.Sleep(1000) '等待1秒鐘。
EndWhile
StateObj.TimerCanceled=True '請求計時器對象的Dispose。
End
SubSubTimerTask(ByValStateObjAsObject)
DimStateAsStateObjClass=CType(StateObj,StateObjClass)
DimxAsInteger '使用Interlocked類遞增計數(shù)器變量。
System.Threading.Interlocked.Increment(State.SomeValue)
Debug.WriteLine("已啟動了新線程"&Now)
IfState.TimerCanceledThen '已請求Dispose。
State.TimerReference.Dispose()
Debug.WriteLine("完成時間"&Now)
End
IfEndSub
當System.Windows.Forms.Timer類不可用時(例如在開發(fā)控制臺應用程序時),線程計時器特別有用。
ClassStateObjClass'用于保留調(diào)用TimerTask所需的參數(shù)
PublicSomeValueAsInteger
PublicTimerReferenceAsSystem.Threading.Timer
PublicTimerCanceledAsBooleanEndClassSubRunTimer()
DimStateObjAsNewStateObjClass()
StateObj.TimerCanceled=False
StateObj.SomeValue=1
DimTimerDelegateAsNewThreading.TimerCallback(AddressOfTimerTask) '創(chuàng)建每隔2秒鐘調(diào)用過程的計時器。
'注意:這里沒有Start方法;創(chuàng)建實例之后, '計時器就開始運行。
DimTimerItemAsNewSystem.Threading.Timer(TimerDelegate,StateObj,_2000,2000)
StateObj.TimerReference=TimerItem '為Dispose保存一個引用。
WhileStateObj.SomeValue<10'運行10個循環(huán)。
System.Threading.Thread.Sleep(1000) '等待1秒鐘。
EndWhile
StateObj.TimerCanceled=True '請求計時器對象的Dispose。
End
SubSubTimerTask(ByValStateObjAsObject)
DimStateAsStateObjClass=CType(StateObj,StateObjClass)
DimxAsInteger '使用Interlocked類遞增計數(shù)器變量。
System.Threading.Interlocked.Increment(State.SomeValue)
Debug.WriteLine("已啟動了新線程"&Now)
IfState.TimerCanceledThen '已請求Dispose。
State.TimerReference.Dispose()
Debug.WriteLine("完成時間"&Now)
End
IfEndSub
當System.Windows.Forms.Timer類不可用時(例如在開發(fā)控制臺應用程序時),線程計時器特別有用。

