【问题标题】:calculate milliseconds with timer Tick in c#在 c# 中使用计时器 Tick 计算毫秒数
【发布时间】:2015-06-13 19:55:22
【问题描述】:

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

【问题讨论】:

  • 几毫秒?从您启动计时器到现在之间的时间?或者从午夜开始的毫秒数?还是阿波罗 11 号发射以来的毫秒数?
  • 你能显示一些代码吗?
  • 请问您要编程什么?
  • 实际上我想创建一个秒表,所以当单击 startStopwatch 按钮时,我想增加毫秒以及秒和分钟。根据秒更改分钟很容易,但是将秒与毫秒同步是我感到困惑的地方!计时器间隔应该是多少?在增加多少毫秒后,我应该增加多少秒?我是新手,所以对我来说似乎很困惑!还有其他方法吗?

标签: c# timer milliseconds


【解决方案1】:

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

除此之外,现在典型的 LCD 显示器以 60 Hz 的频率运行。所以你会得到一个大于 1 毫秒的刷新间隔。这意味着您不能在刷新率小于 1000 Hz 的显示器上的标签中显示毫秒。

【讨论】:

  • a) 您可以将进程的优先级设置为“实时”。当然,这应该小心翼翼地完成。 b) 可以设置每秒调用 1000 次的代码。 c) 您还可以每秒向图形驱动程序发送 1000 次更新。但是当然,就像你说的,屏幕只更新 60Hz,所以从 1000 次屏幕变化中,实际上只会显示 60 次。其他 940 将被跳过。
  • 不完全是我所期望的 :D 但无论如何谢谢大家!!
  • @SQLPolice,您可以将优先级设置为“实时”,但这不会将 Windows 变成实时操作系统(消息泵仍用于触发计时器)。它也不会改变非实时(GC 等)设计的 .Net 的性质。
  • @GvS 当然,您的股票代码永远不会在 1 毫秒内准确滴答;但您的函数可以调用提供正确时间的系统函数。
【解决方案2】:

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

所以你想创建一个秒表。

这样做的方法是使用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 字段。

【讨论】:

  • 非常感谢,这正是我所需要的,你完全理解我!!
  • @CooSalMksShrestha 太棒了!如果我帮助了你,你可以投票并接受:)
【解决方案3】:

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

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

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

秒表通过在 底层定时器机制。如果安装的硬件和操作 系统支持高分辨率性能计数器,则 秒表类使用该计数器来测量经过的时间。除此以外, Stopwatch 类使用系统计时器来测量经过的时间。采用 确定精度的频率和 IsHighResolution 字段 和秒表计时实现的解决方案。

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      相关资源
      最近更新 更多