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

时间:2013-07-30 17:21:47

标签: c# timer

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

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

System.Diagnostics.Stopwatch:无刻度事件。

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

Stopwatch非常简单易用,因此使用Timer的复杂性也非常小。

(假设您可以使用高分辨率的经过时间显示,但更新分辨率更低。)

答案 2 :(得分:0)

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

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

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