为什么基本时间/日期输出需要两秒钟才能显示?

时间:2014-10-22 18:30:01

标签: vb.net winforms visual-studio timer

我拥有的:

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

    我需要时间和日期标签尽可能即时显示。

    我的问题:

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

    我的代码:

    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子,它只是定义了一个默认的接受按钮。以上是5乘5短的潜艇。

    修改

    虽然在评论中已经提供了重现问题的步骤,但我已经要求在此重申。此问题中发布的两个代码块之间的唯一区别是,我在默认情况下保留了标签文本,以免再生产者输入任何内容。

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

    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

1 个答案:

答案 0 :(得分: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 MS以后您在“00:00:02.999”并且经过的事件将在“2014-01-01 00:00:03.0045”结束,并且您的标签更新为“2014-01-01 00” :00:03“ - 你已经”迷失“了一秒钟。

你可以尝试将你的间隔设置为 lower 而不是一秒(比如750),这样可以让你看起来更精确。此外,请确保在表单加载时设置计时器标签。我没有和计时器一起工作,我很难找到我之前读过的文章,但你可能需要担心UI锁定取决于所使用的计时器类型(.net框架中显然有4个计时器类。也许其他人可以扩展,但我对winforms了解不多。