Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过方法将图片框添加到窗体_C#_Winforms_Visual Studio 2010 - Fatal编程技术网

C# 通过方法将图片框添加到窗体

C# 通过方法将图片框添加到窗体,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,我正在尝试创建一个递归方法,它以500毫秒的间隔向表单中添加一个picturebox,也就是说,我希望每隔500毫秒在表单上显示一个新的picturebox。但是,图片框仅在方法完成运行后出现(在我的例子中是8次)。换句话说,仅在4秒钟后,图片框出现,而我希望每500毫秒看到一个 下面是我的递归方法: public void QueenPos(bool[,] a,int x,int y,int c) { for (int i = y; i < a.GetLength(0); i++

我正在尝试创建一个递归方法,它以500毫秒的间隔向表单中添加一个picturebox,也就是说,我希望每隔500毫秒在表单上显示一个新的picturebox。但是,图片框仅在方法完成运行后出现(在我的例子中是8次)。换句话说,仅在4秒钟后,图片框出现,而我希望每500毫秒看到一个

下面是我的递归方法:

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);
        }
    }
}
public void QueenPos(bool[,]a,int x,int y,int c)
{
for(int i=y;i
如果可能的话,我不想使用新的线程来添加图片框


任何帮助都将不胜感激。

永远不要在UI线程上睡觉


相反,您应该使用WinForms计时器。

永远不要在UI线程上睡眠


相反,您应该使用WinForms计时器。

上面所说的关于不在UI线程上睡眠的说法是正确的

但是,您可以尝试以下操作,而不是
线程.Sleep(500)
调用

int count = 0
while(count++<10)
{
Application.DoEvents();
Thread.Sleep(50);
}
int count=0

而(count++上面所说的关于不在UI线程上睡觉的话是正确的

但是,您可以尝试以下操作,而不是
线程.Sleep(500)
调用

int count = 0
while(count++<10)
{
Application.DoEvents();
Thread.Sleep(50);
}
int count=0

虽然(计数++不确定,但此递归似乎有缺陷。当您在循环中时调用QueenPos。不确定,但此递归似乎有缺陷。当您在循环中时调用QueenPos。谢谢…但我如何才能这样做?我还希望我的方法在继续之前停止500毫秒…我是否应该仅为添加picturebox添加计时器?@Shaiyehzkel:在计时器的
勾号处理程序和一个图片框中,并在窗体中为下一个勾号增加一个字段。谢谢……但是我怎么做呢?我还希望我的方法在继续之前停止500毫秒……我是否应该只为添加图片框添加计时器?@Shaiyehzkel:在计时器的
勾号处理程序中r、 和一个图片框,并在表单中增加一个字段,以便下一个勾号。