簡體   English   中英

帶有事件的精密計時器類似於Timer.Tick

[英]Precise timer with event similar to Timer.Tick

我正在為游戲做一個簡單的高分插件。 為此,我需要一個精確的計時器,從中可以在標簽中顯示經過的時間。 到目前為止,我已經嘗試了以下方法:

Windows.Forms.Timer:不保持高分辨率間隔,有些速度較慢,有些速度較快。

System.Diagnostics.Stopwatch:無滴答事件。

我還想到了實現低分辨率的Forms.Timer。 然后,當計時器啟動和停止時,我將存儲系統時間並減去它們即可得出經過的時間。 但是我不想使事情復雜化。 有任何想法嗎?

從現在開始使用經過的時間。 比以下任何一個:

  • 選擇任何計時器,將其設置為15ms,並在每個刻度上顯示經過的時間(如果要處理WinForm / WPF控件應該沒問題)
  • 在每幀刷新上顯示新值(如果您的代碼在每幀刷新時得到通知/調用)

我認為使用Stopwatch (高分辨率)和低分辨率Windows.Forms.Timer組合不會太復雜。

Stopwatch使用非常簡單,因此使用Timer也不會增加太多復雜性。

(這假定您可以使用高分辨率的經過時間顯示,但使用較低的分辨率更新間隔。)

如果您願意接受依賴關系,則可以使用反應性擴展 (Rx)來獲取計時器:

var timer = Observable.Interval(TimeSpan.FromMilliseconds(15))
            .Subscribe(() => /* handler */ );

Rx將確保在創建訂閱的同一線程上調用該處理程序,並且在其后台使用System.Threading.Timer,因此它具有很高的分辨率和一致的分辨率。

暫無
暫無

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

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