我正在为游戏做一个简单的高分插件。为此,我需要一个精确的计时器,可以在标签中显示经过的时间。到目前为止,我已经尝试了以下方法:
Windows.Forms.Timer:不保持高分辨率间隔,有些较慢,有些较快。
System.Diagnostics.Stopwatch:没有刻度事件。
我还想过实现一个低分辨率的 Forms.Timer。然后,当计时器启动和停止时,我会存储系统时间并减去它们以获得经过的时间。但我不想让事情过于复杂。有任何想法吗?
使用从某个时刻开始的经过时间。比任何一个:
我认为使用 a Stopwatch
(因为它的高分辨率)和 low-resolution的组合不会过于复杂Windows.Forms.Timer
。
使用Stopwatch
起来非常简单,因此它也不会增加使用 a 的复杂性Timer
。
(这假设您可以使用高分辨率的经过时间显示,但使用较低分辨率的更新间隔。)
如果你愿意接受依赖,你可以使用Reactive Extensions (Rx) 来获得一个计时器:
var timer = Observable.Interval(TimeSpan.FromMilliseconds(15))
.Subscribe(() => /* handler */ );
Rx 将确保在创建订阅的同一线程上调用处理程序,并且在后台它使用 System.Threading.Timer,因此它具有相当高且一致的分辨率。