我有一個應用程序使用System.Windows.Forms.Timer
,並看到定時器間隔的問題。當我在180秒的持續時間內使用1000的時間間隔時,持續時間一直在183秒左右。當我使用995的間隔時,經過的時間是準確的(即180秒)。我在3臺不同的個人電腦上嘗試過,每臺電腦都有相同的結果。下面的代碼使用2個文本框來顯示開始和結束時間以及標籤作爲倒數計時器。Winforms定時器不準確
任何人都可以解釋這種行爲嗎?
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
這不是一個高精度計時器 - 蜱的活動實際上是在優先的排名非常低,這樣他們可以在你期望 – Plutonix
你必須做在你的應用程序公平一點是已經不遠了,雖然好後發生。通常只有幾毫秒的時間,所以應該在3分鐘內完成第二次差異。多媒體計時器是您可以精確完成的最佳選擇。這裏是一個例子http://www.vbforums.com/showthread.php?837913-MicroTimer-Resource-Friendly-Accurate-Timer – topshot
我只是運行上面的代碼...沒有別的。它始終不準確,間隔爲1000,並且始終準確,間隔爲995. – JHH