vb.net中的倒计时

vb.net中的倒计时,vb.net,timer,Vb.net,Timer,在下面的代码中,我有一个从5分钟开始倒计时的计时器。我试图在mm:ss中的lbl中使用一个可视倒计时,但我使用的示例不起作用。它倒计时,但直到00:00才更新lbl 问下面这个问题的人(我是否得到了代码)说它工作得很好,但对我来说根本不工作 我的代码: Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load picLogo.SizeMode = Picture

在下面的代码中,我有一个从5分钟开始倒计时的计时器。我试图在mm:ss中的lbl中使用一个可视倒计时,但我使用的示例不起作用。它倒计时,但直到00:00才更新lbl

问下面这个问题的人(我是否得到了代码)说它工作得很好,但对我来说根本不工作

我的代码:

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    picLogo.SizeMode = PictureBoxSizeMode.StretchImage

    'Timer until update
    tmrUpdate.Interval = 300000 '5 minutes
    TargetDT = DateTime.Now.Add(CountDownFrom)
    tmrUpdate.Enabled = True


End Sub

Private Sub tmrUpdate_Tick(sender As Object, e As EventArgs) Handles tmrUpdate.Tick
    Dim ts As TimeSpan = TargetDT.Subtract(DateTime.Now)
    If ts.TotalMilliseconds > 0 Then
        lblTimer.Text = ts.ToString("mm\:ss")
    Else
        lblTimer.Text = "00:00"
        tmrUpdate.Stop()
    End If



End Sub

回答:

我使用异步Sub让倒计时计时器在后台进行其他工作时运行。这样,应用程序在
Sub Wait()
期间仍可使用,并且该代码还显示了倒计时。 以1秒的间隔使用一个计时器

Private Async Sub DoStuff()

'Doing stuff

timeUpDate = 599
        tmrUpdate.Start()
        Application.DoEvents()
        Await Task.Run(Sub()
                           Wait()

                       End Sub)
    Loop
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles tmrUpdate.Tick
    Dim hms = TimeSpan.FromSeconds(timeUpDate)
    Dim m = hms.Minutes.ToString
    Dim s = hms.Seconds.ToString

    If timeUpDate > 0 Then
        timeUpDate -= 1
        lblTimer.Text = (m & ":" & s)

    Else

        tmrUpdate.Stop()
        lblTimer.Text = "text"

    End If

End Sub

Private Sub Wait()
    Threading.Thread.Sleep(600000)
End Sub

回答:

我使用异步Sub让倒计时计时器在后台进行其他工作时运行。这样,应用程序在
Sub Wait()
期间仍可使用,并且该代码还显示了倒计时。 以1秒的间隔使用一个计时器

Private Async Sub DoStuff()

'Doing stuff

timeUpDate = 599
        tmrUpdate.Start()
        Application.DoEvents()
        Await Task.Run(Sub()
                           Wait()

                       End Sub)
    Loop
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles tmrUpdate.Tick
    Dim hms = TimeSpan.FromSeconds(timeUpDate)
    Dim m = hms.Minutes.ToString
    Dim s = hms.Seconds.ToString

    If timeUpDate > 0 Then
        timeUpDate -= 1
        lblTimer.Text = (m & ":" & s)

    Else

        tmrUpdate.Stop()
        lblTimer.Text = "text"

    End If

End Sub

Private Sub Wait()
    Threading.Thread.Sleep(600000)
End Sub

您没有正确地实施它。你的计时器只会响一次。你的30万次间隔意味着它会在5分钟后响一次。链接代码使用500毫秒的间隔来实际倒计时,直到达到目标。哦,ok。我没有把问题读对。我想它会在倒计时时更新lbl。它确实会更新标签。大约每500毫秒更新一次,直到达到目标时间。计时器间隔决定了滴答声事件的频率。由于您发现答案有用,但未正确执行,请务必对该答案进行投票。你的计时器只会响一次。你的30万次间隔意味着它会在5分钟后响一次。链接代码使用500毫秒的间隔来实际倒计时,直到达到目标。哦,ok。我没有把问题读对。我想它会在倒计时时更新lbl。它确实会更新标签。大约每500毫秒更新一次,直到达到目标时间。计时器间隔决定了滴答声事件的频率。由于你发现这个答案很有用,所以一定要提高投票率