使用 C# 中的计时器 Tick 计算毫秒数

本文关键字:计算 Tick 计时器 使用 | 更新日期: 2023-09-27 17:55:53

我想在带有Timer_Tick事件的标签中显示毫秒。但即使我将 Timer.interval 初始化为 1,我也无法获得实际的毫秒数。

使用 C# 中的计时器 Tick 计算毫秒数

Windows和C#不是为实时环境而创建的。计时器不保证在属性中设置的精确毫秒触发。

除此之外,现在典型的LCD显示器运行在60 Hz。因此,您将获得大于 1 毫秒的刷新间隔。这意味着您无法在刷新率小于 1000 Hz 的显示器上的标签中显示毫秒。

如果你更好地解释你想在你的问题中做什么,我想你会得到更好的答案!

所以你想创建一个秒表。

执行此操作的方法是使用 DateTime.Now ,它返回当前日期和时间。单击"开始"按钮时,保存 DateTime。Now 供以后使用:

private DateTime startTime;
private void StartButton_Click(...)
{
    startTime = DateTime.Now;
}

然后,您需要时不时地刷新标签中显示的时间。您已经有一个间隔设置为 1 的Timer。这不会每毫秒触发一次;间隔是近似值。但这不是问题!

private void Timer_Tick(...)
{
    TimeSpan timeElapsed = DateTime.Now - startTime;
    timeLabel.Text = timeElapsed.TotalSeconds.ToString("0.000");
}

因此,您不依赖于触发事件的频率。您只需计算自启动计时器以来已经过去了多少时间!

您可以通过多种方式显示生成的timeElapsed值。查看 HoursMinutesSecondsMilliseconds 字段。

如果要实现秒表,则可能需要使用类System.Diagnostics.Stopwatch。看看那个页面,它包含一个示例程序。

Stopwatch类有Start()Stop()Reset()来开始/停止/重置测量的方法。您可以使用ElapsedElapsedMilliseconds来获取到目前为止测量的时间。

关于秒表类的分辨率,MSDN 是这样说的:

秒表通过计算计时器滴答声来测量经过的时间 底层计时器机制。如果安装的硬件和操作 系统支持高分辨率性能计数器,然后 秒表类使用该计数器来测量经过的时间。否则 秒表类使用系统计时器来测量经过的时间。用 频率和高分辨率字段以确定精度 以及秒表计时实现的分辨率。

顺便说一句:在我的系统上,标志Stopwatch.IsHighResolution设置为 true,Stopwatch.Frequency返回一个值 3215342(每秒刻度),足以测量微秒。

正如其他人发布的那样,在Windows中等待计时器事件时,您不会获得毫秒的确切时间。但是,您可以非常精确地测量计时器事件之间的经过时间。执行此操作的常用方法是使用 QueryPerformanceCounter API。