1

我正在创建一个用于模拟掷骰子的小应用程序。为了模拟反弹,我随机更改图片的位置。现在为了模拟不止一次反弹,我使用了一个 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 秒后继续?

4

2 回答 2

5

在事件处理程序完成执行之前,控件不会刷新其图形。否则,如果对一个或多个控件进行了多项更改,当您真正想要的只是最终结果时,它们会反复刷新。

要强制控件刷新其图形,您需要在休眠前插入以下行:

PictureBox1.Refresh()

当然,您可能必须更改PictureBox1为另一个控件的名称。此外,可能值得刷新父控件(即包含骰子的控件。)

于 2011-08-10T03:17:14.720 回答
2

我想你应该Application.DoEvents()在调用之前使用Sleep().

于 2011-08-10T03:18:58.150 回答