.net - 使用 VB.NET 使用调度程序计时器 + 秒表执行时获取不正确的计时

标签 .net vb.net visual-studio-2012 stopwatch dispatchertimer

这里我将时间变量初始化为 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/

相关文章:

c# - 使用域外的 AD 登录详细信息验证 SQL 连接

f# - 可以在 F# 中自定义 Brace Matching 颜色吗?

mysql - 如何从一个 DBCommand 对象执行两个单独的查询?

vb.net - 用字符串引用表单上的按钮 VB.NET

visual-studio - Visual Studio 2012行号/大纲装订线丢失

sql-server - 如何在 SQL Server 中创建行的过期时间

.net - SQL CLR - 从 2008 R2 迁移到 2012。

c# - 发布没有配置文件的版本

c# - 通知操作总是返回状态码 293 : The callback URL is either absent or incorrect

c# - 哪一个是更好的架构/设计方法?