[英]C# Timer — measuring time slower
我正在寫一個代碼,其中:
一世。)
用戶在運行時添加“事件”。 (到flowlayoutpanel)在經過“ x”時間並且將LED轉向功能寫入Led-function.cs類之后,這些事件正在打開/關閉某些LED。 即:1)在3500ms之后左導通2)在4000ms之后右導通
II。)
當用戶點擊啟動時,計時器開始計時。
// Create timer.
System.Timers.Timer _timer;
_timer = new System.Timers.Timer();
_timer.Interval = (1);
_timer.Elapsed += (sender, e) => { HandleTimerElapsed(LedObject, device, _timer); };
_timer.Start();
III。)計時器的滴答事件每毫秒引發一次,並檢查是否已超過用戶定義的時間。 我會在每個滴答事件中通過將+1加到一個整數來測量經過時間。 (NumberOfTicks ++;)
//Timer Handle
private void HandleTimerElapsed(Led_Functions LedObject, string device, System.Timers.Timer _timer)
{
NumberOfTicks++;
if (NumberOfTicks >= Start_time[0])
{
LedObject.LeftLED_ONnobutton(device);
}
}
IV。)我注意到的是,將滴答聲設置為1時。(因此,滴答聲事件每毫秒發生一次)即使將evet設置為3000ms,LED也會實際閃爍約6秒。 將刻度設置為100時(每隔0,1秒),則閃光更為精確(約3,5秒)。
任何想法,為什么我有這個時間延遲? 還是您有任何想法如何更好地實施?
謝謝!
1ms對於CPU來說是一個很小的間隔。 您不能確保每1毫秒調用一次代碼,尤其是在系統需要處理大量工作時。
更好的工具是使用DateTime.Now - startTime
來獲取時間跨度或使用Stopwatch
。
private Stopwatch stopwatch = new Stopwatch();
// start the stopwatch:
stopwatch.Start();
// Timer Handle:
numberOfTicks = stopwatch.ElapsedMilliseconds;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.