.net 计时器运行时停止执行

.net 计时器运行时停止执行,.net,vb.net,.net,Vb.net,我正在使用VB.net构建一个棋盘游戏。我的问题是,当我有一个计时器运行(精灵动画),我的程序的其余部分继续执行。有没有办法延迟程序的执行,直到计时器被禁用 我尝试过使用Threading.thread.sleep(),但这只会延迟整个过程。我假设这是因为计时器和启动它的函数都在同一个线程上运行 While nextSpace endSpace nextSpace+=1 timerMov.Start() 线程.线程.睡眠(timerMov.Interval*100) 结束时 私有子mov_Tic

我正在使用VB.net构建一个棋盘游戏。我的问题是,当我有一个计时器运行(精灵动画),我的程序的其余部分继续执行。有没有办法延迟程序的执行,直到计时器被禁用

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

While nextSpace endSpace
nextSpace+=1
timerMov.Start()
线程.线程.睡眠(timerMov.Interval*100)
结束时
私有子mov_Tick(发送方作为对象,e作为事件参数)处理timerMov.Tick
curShip.img.Location=新点(…)
如果i=100,那么
timerMov.Stop()
i=0
如果结束
i+=1
端接头
这导致事情在我希望他们之前发生,即用户在动画完成他们在所述空间上的着陆之前接收到关于他们着陆的空间的信息

谢谢你的帮助:)

实际上,计时器是从while循环启动的 在子程序内部。我希望while循环一直等到计时器停止 在再次循环之前已停止

摆脱计时器,使用它

下面是它的外观,归结为它的本质:

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
Private Async Sub Button1\u单击(发送方作为对象,e作为事件参数)处理按钮1。单击
' ... 可能更多的代码。。。
而nextSpace endSpace
nextSpace+=1
对于i,作为整数=0到100
等待任务。延迟(someDelayIntervalHere)
curShip.img.Location=新点(…)
下一个
结束时
' ... 可能更多的代码。。。
端接头

请注意,Sub在其声明行中已标记为
Async
。在循环内部,
wait
行使其暂停(替换计时器的滴答事件),但这样做的方式不会导致界面冻结。

我认为这完全取决于您的其余代码如何运行,您的游戏进程是否也在计时器上运行?在这种情况下,您可以暂停该计时器。“我不认为thread.sleep是一种很好的方式。”一个糊涂的傻瓜不幸的是,游戏的其余部分并不是在计时器上运行的。实际上,计时器是从子程序中的while循环启动的。我希望while循环在再次循环之前等待计时器停止。一个可能的简单修复方法,尽管不是我想说的首选方法,是使用一个布尔
animationprogress
,当动画开始时将其设置为false,当动画结束时将其设置为
true
。然后在游戏的主要进程中,你可以确保只有当
animationingprogress
False
@AConfusedSimpleton时,游戏才会进行。我实际上已经尝试过类似的方法。我有一个while循环,其中的代码<动画>进程= = false <代码>作为它的条件,虽然我不确定在循环中放入什么,因为它是空的,程序崩溃了。你可以考虑使用<代码>等待任务。Delay(TimeRoV.Studio * 100)< /C> >(这将要求将包含的例程声明为<代码>异步< /代码>)作为一种在动画完成之前延缓主计算进度的方法。这将不占用整个线程,而是将控制权返回到UI线程的主消息/事件循环,从而允许处理计时器消息。我认为运行动画可能仍然需要计时器,但正如我在评论中所指出的,这仍然与等待任务兼容。延迟,因为在等待延迟完成时计时器事件将触发。@Craig不需要计时器,因为动画代码现在位于内部for循环的while循环中。用户界面将在等待队列中暂停时进行更新并正确响应。谢谢这是我一直在寻找的东西:)谢谢,@Craig+@-Idle\u Mind