C#使用System.Threading.Timer實現(xiàn)計時器的示例詳解
寫在前面
以往一般都是用 System.Timers.Timer 來做計時器,而 System.Threading.Timer 也可以實現(xiàn)計時器功能,并且還可以配置首次執(zhí)行間隔,在功能上比System.Timers.Timer更加豐富;根據(jù)這個特性就可以實現(xiàn)按指定時間間隔對委托進(jìn)行單次調(diào)用。 執(zhí)行的回調(diào)委托也是在 ThreadPool 線程上執(zhí)行,支持多線程運行環(huán)境。
代碼實現(xiàn)
using System; using System.Threading; using System.Threading.Tasks; class Program { private static Timer timer; static void Main(string[] args) { var dueTime = 1000; // 首次執(zhí)行延遲時間 var interval = 2000; // 后續(xù)執(zhí)行間隔時間 var timerState = new TimerState { Counter = 0 }; timer = new Timer( callback: new TimerCallback(TimerTask), state: timerState, dueTime: dueTime, period: interval); Console.WriteLine($"{DateTime.Now:yyyy-MM-dd:HH:mm:ss.fff}: 準(zhǔn)備開始執(zhí)行..."); while (timerState.Counter <= 10) { Task.Delay(1000).Wait(); } timer.Dispose(); Console.WriteLine($"{DateTime.Now:yyyy-MM-dd:HH:mm:ss.fff}: 完成."); } private static void TimerTask(object timerState) { Console.WriteLine($"{DateTime.Now:yyyy-MM-dd:HH:mm:ss.fff}: 觸發(fā)了一次新的回調(diào)."); var state = timerState as TimerState; Interlocked.Increment(ref state.Counter); } class TimerState { // 計數(shù)器 public int Counter; } }
調(diào)用示例
到此這篇關(guān)于C#使用System.Threading.Timer實現(xiàn)計時器的示例詳解的文章就介紹到這了,更多相關(guān)C#計時器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實現(xiàn)把圖片轉(zhuǎn)換成二進(jìn)制以及把二進(jìn)制轉(zhuǎn)換成圖片的方法示例
這篇文章主要介紹了C#實現(xiàn)把圖片轉(zhuǎn)換成二進(jìn)制以及把二進(jìn)制轉(zhuǎn)換成圖片的方法,結(jié)合具體實例形式分析了基于C#的圖片與二進(jìn)制相互轉(zhuǎn)換以及圖片保存到數(shù)據(jù)庫的相關(guān)操作技巧,需要的朋友可以參考下2017-06-06C#實現(xiàn)改變DataGrid某一行和單元格顏色的方法
這篇文章主要介紹了C#實現(xiàn)改變DataGrid某一行和單元格顏色的方法,主要涉及DataGrid控件的添加與使用、數(shù)據(jù)源的綁定、單元格與行的獲取等操作。需要的朋友可以參考下2014-09-09ajaxFileUpload插件,C#返回Json數(shù)據(jù)報錯問題的解決方案
這篇文章主要介紹了ajaxFileUpload插件,C#返回Json數(shù)據(jù)報錯的解決方案,需要的朋友可以參考下2017-12-12