C# windows窗体刷新-如何使其更平滑?

C# windows窗体刷新-如何使其更平滑?,c#,forms,winforms,refresh,C#,Forms,Winforms,Refresh,我在windows窗体上绘制了一个小迷宫,并在每次按键事件中重新绘制它。我怎样才能使它更平滑?图形持续约1秒,当您输入箭头按钮时,您可以看到表单上出现短暂闪烁 public void Draw_Labyrinth() { this.Update(); this.SuspendLayout(); Controls.Clear(); for (int i = 0; i

我在windows窗体上绘制了一个小迷宫,并在每次按键事件中重新绘制它。我怎样才能使它更平滑?图形持续约1秒,当您输入箭头按钮时,您可以看到表单上出现短暂闪烁

        public void Draw_Labyrinth()
        {
            this.Update();
            this.SuspendLayout();

            Controls.Clear();


            for (int i = 0; i < list_Elements_Y.Count; i++)
            {

                for (int j = 0; j < list_Elements_Y[i].list_Elements_X.Count; j++)
                {

                    PictureBox pb = new PictureBox();

                    pb.Location = list_Elements_Y[i].list_Elements_X[j].position;
                    pb.Name = list_Elements_Y[i].list_Elements_X[j].name;
                    pb.Size = list_Elements_Y[i].list_Elements_X[j].size;


                    if (pb.Location == characterPosition) 
                    {
                        pb.Image = Properties.Resources.character;
                    }
                    else if (pb.Name == "item")
                    {
                        pb.Image = Properties.Resources.item;
                    }
                    else if (pb.Name == "wall")
                    {
                        pb.Image = Properties.Resources.wall;
                    }

                    Controls.Add(pb);


                    Application.DoEvents();
                    this.Update();
                }

            }

            Application.DoEvents();
            this.ResumeLayout();

        }
public void Draw_迷宫()
{
这个.Update();
这个.SuspendLayout();
控件。清除();
对于(int i=0;i

非常感谢

WinForms中的闪烁通常可以通过将
double buffered
设置为
true
来解决(或大大改进)

这可以在VS设计器中完成,也可以在
表单
构造函数中完成


整整一秒钟的绘图操作似乎过多了。因此,如果您可以优化,这将是一个好主意。

您是否已将
双缓冲设置为true?您可能正在逐个精灵绘制每个精灵,尝试将静态环境批处理为一个picturebox。直接在部分中绘制到单个图片框…而不是使用一系列picturebox控件我将双缓冲设置为true,这很有效!现在好多了!这并不完美,但更好——感谢“重新绘制”意味着(对大多数人来说)“在单个设备上绘制上下文/图片/位图”,代码显示重新创建了一整套控件。创建控件的速度肯定不会太快(当然不会每次击键都会发生),创建很多控件可能会很慢。@rfmodulator:不,这是概念性的。整个树被重新创建的事实实际上是它如此缓慢的原因之一。所以,这基本上是你暗示的好主意。这只是改进了建议-重新启动程序也将是一种绘画形式,当然你会反对它;-)@斯特凡:对不起,我们又在争论什么呢?@RFM:对不起,我不是在争论,我只是想帮你;阿列克谢说的有道理,也许是直截了当的,但仍然有效——这不仅仅是语义学。你的上一句话建议性能应该得到改善——关键部分是:重新创建控件——这是“绘图”的一个大型超集,因此比实际的“绘图”速度慢得多。创建控件所涉及的远不止绘图。