我想创建一个简单的定时器使用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