Timer 使用方式
From: |
011netservice@gmail.com |
Date: |
2022-04-24 |
Timer
Timer是程式開發時, 常用的基本元件.
.Net Framework提供4種不同的timer元件如下.
Name |
Multithread |
適用 |
使用方式 |
Description |
System.Timers.Timer |
Y |
Server或Service. |
event message |
- 循環時間固定. 不受Job thread影響. 只要時間一到就會呼叫ElapsedEventHandler一次.
- 可指定首次執行前的等待時間.
|
System.Threading.Timer |
Y |
Server或Service. |
callback method |
- 循環時間固定. 不受Job thread影響. 只要時間一到就會呼叫callback method一次.
- 可指定首次執行前的等待時間.
|
System.Windows.Forms.Timer |
N |
Windows Form |
by toolbox/by code |
- 跟form同一個執行緒.
- 循環時間為(Timer interval + job執行時間). 若Job執行時間超過Timer Interval時間,
則循環執行時間不固定.
|
System.Web.UI.Timer |
|
ASP.NET |
web page postbacks |
可定時以非同步方式更新網頁之UpdatePanel至client端. |
程式參考: Timer使用方式
常見問題
若需要準時於(每分鐘0秒)時, 或(每小時0分0秒)時執行, 應如何控制?
例如:
若於01:01:01時啟動timer, 需要控制於01:02:00首次執行, 並且之後每分鐘0秒時循環執行, 應如何控制:
Ans:
參考如下計算程式, 設定於timer的首次執行/每次執行等待時間:
// 每分鐘0秒準時執行.
DateTime t1 = DateTime.Now;
DateTime t2 = t1.AddMinutes(1);
DateTime t3 = new DateTime(t2.Year, t2.Month, t2.Day, t2.Hour, t2.Minute, 0, 0);
double dDueTimeMs = (t3 - t1).TotalMilliseconds; // 首次執行需要等待的ms.
double dPeriodMs = (t2 - t1).TotalMilliseconds; // 每分鐘之ms, 這是固定值, 可訂為常數, 不需要每次計算.
// 每小時0分0秒準時執行.
DateTime th1 = DateTime.Now;
DateTime th2 = th1.AddHours(1);
DateTime th3 = new DateTime(th2.Year, th2.Month, th2.Day, th2.Hour, 0, 0, 0);
double dhDueTimeMs = (th3 - th1).TotalMilliseconds; // 首次執行需要等待的ms.
double dhPeriodMs = (th2 - th1).TotalMilliseconds; // 每小時之ms, 這是固定值, 可訂為常數, 不需要每次計算.
Log:
Date |
Author |
Description |
2017-02-13, |
Honda, |
copy from luckstat document. |
2017-03-15, |
Honda, |
增加循環時間與Interval 說明. |