具有类似timer.Tick事件的精确计时器

本文关键字:计时器 事件 Tick timer | 更新日期: 2023-09-27 18:25:43

我正在为一个游戏做一个简单的高分插件。为此,我需要一个精确的计时器,从中我可以在标签中显示经过的时间。到目前为止,我已经尝试了以下内容:

Windows.Forms.Timer:不保持高分辨率间隔,有些较慢,有些较快。

System.Diagnostics.Stopwatch:无tick事件。

我还想过实现一个低分辨率的Forms.Timer。然后,当计时器启动和停止时,我会存储系统时间,并减去它们来获得经过的时间。但我不想把事情搞得过于复杂。有什么想法吗?

具有类似timer.Tick事件的精确计时器

我认为使用Stopwatch(因为其高分辨率)和低分辨率Windows.Forms.Timer的组合不会过于复杂。

Stopwatch使用起来非常简单,因此它也为使用Timer增加了很少的复杂性。

(这假设您可以显示高分辨率的运行时间,但更新间隔较低。)

使用从某个时刻起经过的时间。比任一:

  • 选择任何计时器,将其设置为15毫秒,并在每个刻度上显示经过的时间(如果您正在处理WinForm/WPF控件,则应该可以)
  • 在每次帧刷新时显示新值(如果每次帧刷新都通知/调用代码)

如果您愿意接受依赖项,您可以使用Reactive Extensions(Rx)来获得计时器:

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

Rx将确保在创建订阅的同一线程上调用该处理程序,并且它使用System.Threading.Timer,因此它具有非常高且一致的分辨率。