【问题标题】:Why is basic time/date output taking two seconds to display?为什么基本时间/日期输出需要两秒钟才能显示?
【发布时间】:2014-10-22 18:30:01
【问题描述】:

我有什么:

  1. 我正在使用计时器元素在表单底部显示当前时间和日期(实时)。
  2. 我使用两个标签分别显示时间和日期。

我需要什么:

我需要时间和日期标签与其他所有内容一样立即显示。

我的问题:

时间和日期标签的显示延迟两秒。

我的代码:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    'Format time and date labels.
    TimeMain.Text = Format(Now, "hh:mm:ss")
    DateMain.Text = Format(Now, "dddd, d/MM/yyyy")
End Sub

注意:上面是一个Form_Load sub,它简单地定义了一个默认的接受按钮。上面后面是 5 x 5 短子。

编辑:

尽管 cmets 中已经提供了重现问题的步骤,但我被要求在此重申。此问题中发布的两个代码块之间的唯一区别是,我将标签文本保留为默认设置,以免复制者不得不输入任何内容。

将两个标签和一个计时器拖到一个新表单上并使用以下代码:

Public Class Form1

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        'Format time and date labels.
        Label1.Text = Format(Now, "hh:mm:ss")
        Label2.Text = Format(Now, "dddd, d/MM/yyyy")
    End Sub

End Class

对于计时器的属性,Enabled 定义为TrueInterval 定义为1000

【问题讨论】:

  • 间隔设置为多少?什么是Now?你能发布一个最小的样本来重现这个问题吗?
  • 所以在计时器的第一个计时器滴答声之前,您不会填写标签的文本属性?它的间隔是多少?你不能在没有计时器的情况下创建它们的文本值吗?
  • 您的意思是最初需要两秒钟还是总是延迟两秒钟?
  • 把你所有的问题都用“我有什么”这个巨大的字体,“我需要什么”格式有点烦人。您可以回答@SriramSakthivel 关于间隔的问题,而不是重新安装巨型字体。要么就是这样,要么你有东西阻塞了 UI 线程。 Windows 不是实时操作系统。
  • @LarsTech 如果我可以选择接受/拒绝其他成员的编辑,那么我当然应该能够毫无责备地行使这项权利。此外,我可以证实其他成员(有些几乎和你一样有声望)慷慨地为我的问题格式鼓掌(见这里:stackoverflow.com/q/23806386/2971649)。 “巨型字体”是本网站的默认标题大小。它在那里被使用。其次,假设我没有回答斯里拉姆的询问是不公平的。他要求提供最少的样本或复制品。再给我 10 分钟的时间来满足他的要求。

标签: vb.net winforms visual-studio timer


【解决方案1】:

我知道这并不完全是一个答案,但是这太长了,无法放入评论中。另请阅读此处以获取有关计时器的更多信息: Why are .NET timers limited to 15 ms resolution? Does the System.Windows.Forms.Timer run on a different thread than the UI?

根据我的理解(这很可能是错误的),不能保证在时间过去后准确触发计时器消逝的事件,更多的是...将其放入队列中以触发一旦计时器结束。

假设您的应用程序/计时器从“00:00:01.999”开始,而您的标签将“00:00:01”声明为当前时间。

恰好 1000 毫秒后,您处于“00:00:02.999”并且已逝事件触发,在“2014-01-01 00:00:03.0045”完成并且您的标签更新为“2014-01-01 00” :00:03" - 你已经在这里“失去”了一秒钟。

您可以尝试将您的时间间隔设置为低于一秒(例如 750),这可能会让您获得更准确的计数器。此外,确保您在表单加载时设置计时器标签。我对定时器的使用并不多,而且我很难找到我之前阅读的文章,但您可能需要担心 UI 锁定,具体取决于所使用的定时器类型(.net 框架中显然有 4 个定时器类。 )也许其他人可以对此进行扩展,但我对winforms了解不多。

【讨论】:

  • 虽然在表单加载时设置计时器标签会立即生成标签,但它们不再是实时的(秒数不递增)。然而,减少间隔确实有效。间隔100个作品。我原以为间隔将以毫秒为单位确定计时器的秒数增加的速度,但我现在明白间隔指的是事件的触发。感谢您的坚持和独创性。这里有用的上下文:msdn.microsoft.com/en-us/library/…
  • @Kritner : Timers article by Steve 在这个SO Topic
猜你喜欢
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 2022-10-21
  • 2012-05-15
相关资源
最近更新 更多