C# windows窗体刷新-如何使其更平滑?
我在windows窗体上绘制了一个小迷宫,并在每次按键事件中重新绘制它。我怎样才能使它更平滑?图形持续约1秒,当您输入箭头按钮时,您可以看到表单上出现短暂闪烁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
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:对不起,我不是在争论,我只是想帮你;阿列克谢说的有道理,也许是直截了当的,但仍然有效——这不仅仅是语义学。你的上一句话建议性能应该得到改善——关键部分是:重新创建控件——这是“绘图”的一个大型超集,因此比实际的“绘图”速度慢得多。创建控件所涉及的远不止绘图。