Ich habe eine App, die eine System.Windows.Forms.Timer
verwendet und sehe Probleme mit dem Timer-Intervall. Wenn ich ein Intervall von 1000 für eine Dauer von 180 Sekunden verwende, ist die verstrichene Zeit konsistent um 183 Sekunden. Wenn ich ein Intervall von 995 verwende, ist die verstrichene Zeit genau (d. H. 180 Sekunden). Ich habe das auf 3 verschiedenen PCs mit den gleichen Ergebnissen auf jedem versucht. Der folgende Code verwendet 2 Textfelder, um die Start- und Endzeiten und eine Bezeichnung als Countdown-Timer anzuzeigen.Winforms Timer nicht genau
Kann jemand dieses Verhalten erklären?
Public Class Form1
Private WithEvents tmr As New System.Windows.Forms.Timer
Private Duration As Integer = 180
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RunTimer()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lblActivityTimer.Text = FormatCounter(Duration)
tmr.Interval = 1000
End Sub
Private Sub RunTimer()
tmr.Start()
TextBox1.Text = Now.ToString()
End Sub
Private Function FormatCounter(sec As Integer) As String
Dim Hours, Minutes, Seconds As Integer
Hours = sec \ 3600
Seconds = sec Mod 3600
Minutes = Seconds \ 60
Seconds = sec Mod 60
FormatCounter = Hours.ToString.PadLeft(2, "0"c) & ":" _
& Minutes.ToString.PadLeft(2, "0"c) _
& ":" _
& Seconds.ToString.PadLeft(2, "0"c)
End Function
Private Sub tmr_Tick(sender As Object, e As EventArgs) Handles tmr.Tick
Duration -= 1
lblActivityTimer.Text = FormatCounter(Duration)
If Duration = 0 Then
TextBox2.Text = Now.ToString()
tmr.Stop()
End If
End Sub
End Class
Es ist keine hohe Präzision Timer - so weit aus seinem wenn die Zecke Ereignisse in Priorität tatsächlich ziemlich niedrig Rang, so dass sie nach gut passieren können, wenn man – Plutonix
erwarten Sie müssen ein gutes Stück in Ihrer Anwendung tun. Es ist normalerweise nur ein paar Millisekunden zu spät, also sollte in weniger als einem zweiten Unterschied in 3 Minuten sein. Der Multimedia-Timer ist das Beste, was Sie für Präzision tun können. Hier ist ein Beispiel http://www.vbforums.com/showthread.php?837913-MicroTimer-Resource-Friendly-Accurate-Timer – topshot
Ich führe nur den Code oben ... nichts anderes. Es ist konsistent ungenau mit einem Intervall von 1000 und konsistent genau mit einem Intervall von 995. – JHH