簡體   English   中英

.NET框架中Timer的可靠替代品?

[英]Reliable alternative to Timer in .NET framework?

.Net中是否有relialbe替代Timer類?
我們在使用System.Timers.Timer和System.Threading.Timer時遇到問題,例如,它們立即啟動,或者有時在長時間不活動后(49天后)會退出。
我發現它們似乎存在很多問題,例如: http : //social.msdn.microsoft.com/Forums/en/netfxbcl/thread/dbc398a9-74c0-422d-89ba-4e9f2499a6a3
我們不能使用Forms計時器。
我們正在考慮將線程暫停一段時間而不是計時器...

本文介紹了.Net框架中計時器類之間的區別。

但是也許另一種方法可以幫助您:

如果必須等待這么長時間,最好在需要啟動某些東西時計算DateTime 之后,您的任務每秒鍾喚醒一次(或需要任何精度),然后將當前時間與所需時間進行比較。 如果當前時間等於或大於當前時間,則開始工作。 否則,進入睡眠狀態(直到下一秒鍾,一小時,一毫秒等)。 順便說一下,這就是Microsoft Task Scheduler的工作方式。

我認為您需要System.Diagnostics.Stopwatch

秒表通過計算基礎計時器機制中的計時器滴答來測量經過的時間。 如果安裝的硬件和操作系統支持高分辨率性能計數器,則Stopwatch類將使用該計數器來測量經過的時間。 否則,秒表類將使用系統計時器來測量經過的時間。 使用Frequency和IsHighResolution字段來確定秒表計時實現的精度和分辨率。

您可以每隔48天在Tick / Elapsed事件處理程序中將計時器替換為新實例。

線程很可能會起作用,但是值得額外的開銷嗎?

我也意識到這些限制,並實現了自己的計時器。 做出這個決定很遺憾,但是到目前為止我還沒有后悔。 另外,我自己的計時器實現了一個接口,以便可以輕松地對使用計時器的類進行單元測試。

某些.NET計時器還存在一個問題,即它們可能在最后一個回調完成之前調用該回調。

我建議將計時器邏輯放在自己的類中,而不要暫停線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM