我正在创建一个模拟骰子滚动的小应用程序。为了模拟弹跳,我随机改变了图片的位置。现在要模拟多个弹跳,我使用for循环来连续改变图片框的位置。但它没有按照我的计划发生,表单只显示最后一个循环的位置。我甚至尝试使用System.Threading.Thread.Sleep(1000)
希望显示弹跳,但即使它们只显示最后一个循环。
For bounceCount As Integer = 1 To bounces
bounce(pb_dice1)
bounce(pb_dice2)
System.Threading.Thread.Sleep(3000) 'I need to pause here and show the recent change in position then continue after 3 seconds
Next
bounce
方法会更改PictureBox
的位置。
如何暂停我的for循环,显示新定位的骰子,然后在3秒后继续?
答案 0 :(得分:5)
在事件处理程序完成执行之前,控件不会刷新其图形。否则,如果对一个或多个控件进行了多处更改,当您真正想要的是最终结果时,它们会反复刷新。
要强制控件刷新图形,您需要在睡眠前插入以下行:
PictureBox1.Refresh()
当然,您可能必须将PictureBox1
更改为其他控件的名称。此外,可能值得刷新父控件(即包含骰子的控件)。
答案 1 :(得分:2)
我猜你应该在调用Application.DoEvents()
之前使用Sleep()
。