这里我将时间变量初始化为 0,并使用 StopWatch
来计算毫秒数,并使用 DispatcherTimer
来更新 UI
Imports System.Threading
Imports Windows.UI.Xaml
Dim dt As DispatcherTimer = New DispatcherTimer
Dim dd As Integer = 0
Dim mm As Integer = 0
Dim hh As Integer = 0
Dim ss As Integer = 0
Dim ms As Integer = 0
Dim stopwatch As System.Diagnostics.Stopwatch = New System.Diagnostics.Stopwatch
Private Sub ontimertick()
ms = stopwatch.ElapsedMilliseconds
ss = ms / 1000
ms = ms Mod 1000
mm = ss / 60
ss = ss Mod 60
hh = mm / 60
mm = mm Mod 60
dd = hh / 24
hh = hh Mod 24
MicroSeconds.Text = ms.ToString("00")
Seconds.Text = ss.ToString("00")
Minutes.Text = mm.ToString("00")
Hours.Text = hh.ToString("00")
End Sub
Private Sub StartButton_Click(sender As Object, e As RoutedEventArgs) Handles StartButton.Click
dt.Interval = New TimeSpan(0, 0, 0, 0, 100)
AddHandler dt.Tick, AddressOf ontimertick
stopwatch.Start()
dt.Start()
End Sub
问题是所有变量的第一个实例的增量时间比我预期的实际时间长 1/2。
例如secondary.text 在第 500 毫秒更新为 1,并在 1000 毫秒后更新为 1
同样,Minutes.text 在第 30 秒后更新为 1,此后它会在 60 秒后正常递增
与小时和日期相同,但仅适用于第一个实例,此后它会在正常间隔后递增
谁能帮我找出逻辑错误吗?
我想知道如何反转该过程并倒计时?
你们能帮助我实现我可以实现的想法/逻辑吗?
最佳答案
我认为您所做的工作超出了您的需要。 Stopwatch.Elapsed
属性返回一个 TimeSpan
,其中包含已用时间的所有各个部分。
您的 ontimertic()
可能如下所示:
Private Sub ontimertick()
TimeSpan e = stopwatch.Elapsed
MicroSeconds.Text = e.Milliseconds.ToString("00")
Seconds.Text = e.Seconds.ToString("00")
Minutes.Text = e.Minutes.ToString("00")
Hours.Text = e.Hours.ToString("00")
End Sub
关于.net - 使用 VB.NET 使用调度程序计时器 + 秒表执行时获取不正确的计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12482903/