一直想寫這一篇關於很久以前時間人系列的補遺,想起當時寫文章太不夠謹慎,對某些基本概念的認識不足,至今仍梗梗於懷;偏偏我又是個懶人,兼之一直忙著寫其它內容,然後就把這事忘了。不過今天有位熱心的網友回應了那一篇的問題 ( 終於被逮到了 ),讓我立下決心今天把這篇補遺寫完。
2013-01-19
一直想寫這一篇關於很久以前時間人系列的補遺,想起當時寫文章太不夠謹慎,對某些基本概念的認識不足,至今仍梗梗於懷;偏偏我又是個懶人,兼之一直忙著寫其它內容,然後就把這事忘了。不過今天有位熱心的網友回應了那一篇的問題 ( 終於被逮到了 ),讓我立下決心今天把這篇補遺寫完。
這一次來講比較進階型的排程器作法,主要想達到以下幾個目的:
1.能夠以類別的型式存在,方便改裝成類別庫的型式提供其它的應用程式引用。
2.不需要每秒﹝或每分鐘﹞不斷地去檢查是否已經抵達指定的時間,而是在指定時間到達時刻去執行必要程序即可。
3.可以將要執行的程序以CallBack方式傳入執行個體中。
4.當系統時間被改變的時候,依然能夠準確的在指定抵達時間執行程序。
有些時候我們在程式中會用到排程器的功能,說起來排程器其實就是在應用Timer的功能,我知道網路上其實有滿多這種現成的排程器類別可用,不過個人覺得自己動手寫來的有趣點。
第三種Timer就是System.Threading.Timer﹝以下簡稱為Threading.Timer﹞,和前兩個Timer不同的是,Threading.Timer是使用回呼﹝Callback﹞方式而非使用事件﹝Event﹞來執行其工作,在MSDN文件庫中的System.Threading命名空間中的[Timer 成員]可以看到這個類別是不具備事件的。
第二個要談到的時間人就是System.Timers.Timer了,System.Timers.Timer和Windows.Forms.Timer有一些個不同點
Timer在.Net中也是個挺有趣的族群,在.Net Framework中有三種不一樣的Timer,分別是Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer。這三個時間人在某些地方有點相同,也有許多地方大異其趣,所以我一直覺得他們是很有意思的。