计时器运行时停止执行

时间:2019-05-28 06:08:05

标签: .net vb.net

我正在使用VB.net构建棋盘游戏。我的问题是,当我运行计时器(用于精灵动画)时,程序的其余部分继续执行。有什么方法可以将程序的执行延迟到禁用定时器之前?

我尝试使用Threading.thread.sleep(),但这只会延迟整个过程。我认为这是因为计时器和启动它的函数都在同一线程上运行吗?

While nextSpace <> endSpace
            nextSpace += 1
            timerMov.Start()
            Threading.Thread.Sleep(timerMov.Interval * 100)
End While

Private Sub mov_Tick(sender As Object, e As EventArgs) Handles timerMov.Tick
        curShip.img.Location = New Point(...)
        If i = 100 Then
            timerMov.Stop()
            i = 0
        End If
        i += 1
    End Sub

这导致事情发生在我希望它们发生之前,即用户在动画完成它们降落到所述空间之前已经收到有关其降落的空间的信息。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

  

基本上,从while循环启动计时器会发生什么   在子程序中。我希望while循环要等到计时器计时到   在再次循环之前已停止。

摆脱计时器,使用Async/Await

这就是它的样子,归结为本质:

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    ' ... possibly more code ...

    While nextSpace <> endSpace
        nextSpace += 1

        For i As Integer = 0 To 100
            Await Task.Delay(someDelayIntervalHere)
            curShip.img.Location = New Point(...)
        Next
    End While

    ' ... possibly more code ...

End Sub

请注意,Sub已在其声明行中标记为Async。在循环内部,Await行会导致其暂停(替换Timer的Tick事件),但这样做的方式不会导致接口冻结。