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

コントロールは、イベントハンドラーの実行が完了するまで、グラフィックを更新しません。それ以外の場合、1つ以上のコントロールに複数の変更が加えられた場合、本当に必要なのが最終結果であるときに、それらは繰り返し更新されます。

コントロールにグラフィックを更新させるには、スリープする前に次の行を挿入する必要があります。

PictureBox1.Refresh()

PictureBox1もちろん、別のコントロールの名前に変更する必要があるかもしれません。また、親コントロール(つまり、サイコロを含むコントロール)を更新する価値がある場合もあります。

于 2011-08-10T03:17:14.720 に答える
2

Application.DoEvents()を呼び出す前に使用する必要があると思いますSleep()

于 2011-08-10T03:18:58.150 に答える