具有类似timer.Tick事件的精确计时器
本文关键字:计时器 事件 Tick timer | 更新日期: 2023-09-27 18:25:43
我正在为一个游戏做一个简单的高分插件。为此,我需要一个精确的计时器,从中我可以在标签中显示经过的时间。到目前为止,我已经尝试了以下内容:
Windows.Forms.Timer:不保持高分辨率间隔,有些较慢,有些较快。
System.Diagnostics.Stopwatch:无tick事件。
我还想过实现一个低分辨率的Forms.Timer。然后,当计时器启动和停止时,我会存储系统时间,并减去它们来获得经过的时间。但我不想把事情搞得过于复杂。有什么想法吗?
我认为使用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,因此它具有非常高且一致的分辨率。