0

500ミリ秒の間隔で画像ボックスをフォームに追加する再帰的な方法を作成しようとしています。つまり、500ミリ秒ごとに新しい画像ボックスをフォームに表示したいと考えています。ただし、画像ボックスは、メソッドの実行が終了した後(私の場合は8回)にのみ表示されます。つまり、500ミリ秒ごとにそれぞれが表示されることを期待していたのに、4秒後に画像ボックスが表示されました。

これが私の再帰的な方法です:

public void QueenPos(bool[,] a,int x,int y,int c)
{
    for (int i = y; i < a.GetLength(0); i++)
    {
          **some code**

            PictureBox im = new PictureBox();                            
            im.SizeMode = PictureBoxSizeMode.StretchImage;
            im.Image = Image.FromFile(@"path");
            im.Size = new Size(40, 40);
            im.Location = new Point((x * 50) + 305, ((i * 50) + 55));
            Controls.Add(im);
            im.BringToFront();

            Thread.Sleep(500);

            QueenPos(a, x + 1, 0, c + 1);
        }
    }
}

可能であれば、画像ボックスの追加を処理する新しいスレッドを使用しないことをお勧めします。

どんな助けでも大歓迎です。

4

2 に答える 2

4

UIスレッドでスリープしないでください。

代わりに、WinFormsタイマーを使用する必要があります。

于 2012-08-31T21:19:31.790 に答える
2

上で述べたことは、UIスレッドでスリープしないことについて正しかったです。

ただし、Thread.Sleep(500)電話の代わりに次のことを試すことができます

int count = 0
while(count++<10)
{
Application.DoEvents();
Thread.Sleep(50);
}
于 2012-08-31T21:51:31.837 に答える