VB.net - 定时器不更新

问题描述:

我想添加一个正常运行时间计数器,以便从我的应用程序启动它的那一刻起,启动一个定时器,该定时器按秒增加,直到应用程序关闭或停止目的。VB.net - 定时器不更新

当前计时器计数第一秒然后停止。这可能是我不理解滴答功能?我假设为定时器设置的时间间隔将刷新或循环tick子内的代码? (我可以大量错误)。

我有timer1,我已将它设置为"Enabled",间隔时间为"1000"一秒。

在我Timer1_Tick Sub我有这样的:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    Dim seconds, minutes, hours As Integer 
    If seconds = 60 Then 
     seconds = 0 
     minutes = minutes + 1 
    End If 

    If minutes = 60 Then 
     If seconds = 60 Then 
      seconds = 0 
      minutes = 0 
      hours = hours + 1 
     End If 
    End If 
    seconds = seconds + 1 
    Label44.Text = Format(hours, "00") & "." & Format(minutes, "00") & "." & Format(seconds, "00") 
End Sub 

Form1_LoadTimer1.Start()

请你能告诉我,我缺少的是什么?谢谢。

+2

秒是在Tick事件中本地声明的,所以该值将每次通过重新初始化。您的标签只会显示1秒。您可以通过在tick事件代码中放置一个断点并每秒停止一次来确认。 – Jason

+0

好,所以你说这是因为我在tick事件中声明了seconds,minutes和hours字符串,它将不断重新加载?我需要例如在form1_load或其他类中声明这些内容? – Sam

+0

@Sam你可以在全局声明它们(在函数的上面) – Mr47

您需要在Form1内声明变量。因为他们认为蜱事件触发正好在指定的时间间隔,而不会发生

Public Class Form1 

    Private seconds, minutes, hours As Integer 

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick  
     If seconds = 60 Then 
      seconds = 0 
      minutes = minutes + 1 
     End If 

     If minutes = 60 Then 
      If seconds = 60 Then 
       seconds = 0 
       minutes = 0 
       hours = hours + 1 
      End If 
     End If 
     seconds = seconds + 1 
     Label44.Text = Format(hours, "00") & "." & Format(minutes, "00") & "." & Format(seconds, "00") 
    End Sub 
End Class 
+1

此方法不准确,因为刻度事件可能会或可能不会在指定的时间间隔内完全激活。 – dbasnett

+0

的确,我已经通过了其他答案。但问题并不是要求最好的方法,只是问为什么选择的方法不起作用。 – ForkandBeard

+0

如果选择的方法应该提供有意义的数据,即经过的时间,那么它将永远不会工作。我们只能希望有类似需求的人能阅读所有的帖子。 – dbasnett

对于我的应用程序的正常运行时间,我只记录它开始的时间和日期,然后使用一个标签来显示记录时间以来的时间差异。这比运行一直在滴答滴答的时间要简单得多。

+1

在这种情况下,您仍然需要一个计时器来更新标签(除非您将其绑定到另一个常规事件中),但它至少占用更少资源 - 您可以每分钟运行一次,而不是每秒运行一次。 –

给出的方法是非常不准确的。

刻度线事件应该只用于从更精确的时间测量中更新标签。在下面的代码中使用秒表。

Dim appruntime As Stopwatch = Stopwatch.StartNew 

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    Label1.Text = appruntime.Elapsed.ToString("d\ hh\:mm\:ss") 
End Sub 
Dim appruntime As Stopwatch = Stopwatch.StartNew 

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    Label1.Text = appruntime.Elapsed.ToString("d\ hh\:mm\:ss") 
End Sub