我想創建一個簡單的定時器使用VB.NET秒錶循環使用VB.NET
我想按Button1的,並開始在文本框中秒計數,這個接口。
I do not want to use the Timer Component because it does not offer high resolution.
所以,我按規格決定使用秒錶類,由於其較高的分辨率。
但根據我的VB.NET代碼,在我看來,整個「dotnet冒險」是不可能的。這是因爲當我按下Button1時,整個窗體凍結,我不能按Button2來停止計時器。
我的代碼有什麼問題嗎? 我應該怎麼做才能具備上述功能?
在此先感謝!
Public Class Form1
Private enableTime As TimeSpan
Private stopWatch As New Stopwatch()
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
stopWatch.Start()
If stopWatch.IsHighResolution Then
Do
If stopWatch.ElapsedTicks.Equals(TimeSpan.TicksPerSecond) Then
enableTime = enableTime + TimeSpan.FromSeconds(1)
TextBox1.Text = enableTime.ToString
stopWatch.Restart()
End If
If Not stopWatch.IsRunning Then
Exit Do
End If
Loop
End If
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
stopWatch.Stop()
stopWatch.Reset()
End Sub
末級
即使可以找出線程和UI更新,您仍然不會獲得所需的分辨率。看看你是如何檢查'stopWatch.ElapsedTicks.Equals(TimeSpan.TicksPerSecond)'?這可能永遠不會是真的。當你的循環正在運行時,這些滴答滴答會從你的下面滑出 - 你不會看到它們全部。即使你做了,當你重新啓動計時器時,你將失去更多的分辨率。漂移是不可避免的。這不是.NET的問題,它是計算機的基本功能(至少是你使用的)。 – 2013-05-11 11:59:33
在我自己的觀點,我與主要概念錯過分辨率以上納秒的極少數這樣的分辨率是儘可能好。但我承認我可能是錯的! – Novemberland 2013-05-11 12:05:28
你想要的分辨率是什麼?難道你只是不會'錯過'一秒鐘,就像這個人在關聯問題中所做的那樣?或者你真的需要一堆小數位嗎? – 2013-05-11 12:08:28