私はSystem.Windows.Forms.Timer
を使用するアプリケーションを持っていて、タイマーの間隔に問題が見られています。 180秒の間に1000の間隔を使用すると、経過時間は常に約183秒です。 995の間隔を使用すると、経過時間は正確です(つまり180秒)。私は3つの異なるPCでこれを試してみましたが、それぞれ同じ結果が出ました。以下のコードは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分で2番目の差が十分にあるはずです。マルチメディアタイマーは、精度のためにできる最高のものです。ここに例がありますhttp://www.vbforums.com/showthread.php?837913-MicroTimer-Resource-Friendly-Accurate-Timer – topshot
私はちょうど上記のコードを実行しています...他に何もありません。一貫性があり、間隔が1000で、一貫して正確であり、間隔は995です。 – JHH