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

时间:2015-06-13 19:55:22

标签: c# timer milliseconds

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

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

所以你想创建一个秒表。

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

private DateTime startTime;

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

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

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

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

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

答案 2 :(得分:1)

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

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

关于秒表课程的解决方案,MSDN说:

  

秒表通过计算计时器滴答来测量经过的时间   基础计时器机制。如果安装了硬件并运行   系统支持高分辨率性能计数器,然后   秒表类使用该计数器来测量经过的时间。除此以外,   秒表类使用系统计时器来测量经过的时间。使用   Frequency和IsHighResolution字段用于确定精度   和秒表计时实施的解决方案。

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

答案 3 :(得分:0)

正如其他人发布的那样,在Windows中等待计时器事件时,您没有获得ms精确的时间。但是,您可以非常精确地测量计时器事件之间的经过时间。通常的方法是使用QueryPerformanceCounter API。