2010-12-21 61 views
2

有沒有一種方法來檢測定時器已過去的事件是否重疊?例如,我在經過的事件之間創建了一個間隔爲200ms的定時器,但事件中執行的代碼耗時大於200ms。結果,在最後一個完成之前執行另一個已過去的事件。還有一種方法可以防止發生這種情況,以致在最後一個事件完成之前不會調用另一個事件?.NET - 定時器已經過的事件重疊

+1

你希望第二個電話在最後一個結束後200毫秒出現,還是立即? – Reddog 2010-12-21 08:11:35

回答

1

如果你希望你的計時器事件發生在200ms的標誌,只是跳過一個(而不是推遲他們)如果前面的仍在運行,那麼你可以使用鎖碼。

如果您使用方法Monitor.TryEnter,那麼它將返回一個布爾值,告訴您它是否獲得了鎖(並且因此如果另一個線程已經在鎖定的代碼中)。這將使您能夠跳過並等待下一次運行時間(如果您想要的話)(或者寫出調試消息,抱怨其耗時過長或其他)。

這是否是一個好的解決方案真的取決於你的計時器想要做什麼。通常,其他人建議在上一次結束後爲下一個事件啓動計時器的方法對於工作來說已經足夠了。

1

如果你想火下一週期後,當前已完成,停止計時,如果它擊中它的Tick事件,並重新啓動它,如果你就大功告成了。

Timer fires Tick-Event 
    Disable/Stop Timer 
    Program logic goes here 
    Restart Timer