为什么我的GUI内容会闪烁?

时间:2018-04-10 12:21:50

标签: c# user-interface

我想构建一个包含正在移动的简单方块的窗口。它工作到目前为止,但矩形闪烁,我不知道为什么。我该如何解决这个问题。我只想学习如何使用C#制作游戏

这是我的Program.cs

        static void Main()
        {
            Form1 myForm = new Form1();

            while (true)
            {
                myForm.UpdateData();

                myForm.Invalidate();
                myForm.Update();
                myForm.Refresh();

                myForm.Show();
                Thread.Sleep(15);
            }
        }

这是我的Program.cs

这是我的Form1.cs

        public Form1()
        {
            InitializeComponent();
            this.Text = "2D Grafik mit C# - Beispiel 1";

            DoubleBuffered = true;

            g = this.CreateGraphics();
            g.SmoothingMode = SmoothingMode.AntiAlias;

            xPos = 50;
            yPos = 50;
        }

        public void UpdateData()
        {
            xPos += 1;
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            g.FillRectangle(new SolidBrush(Color.Red), xPos, yPos, 50, 50);
        }

我无法想象这个问题是由

引起的

任何人都可以帮助我吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

Program.cs中,您不需要在每次迭代中显示表单,并且您不需要刷新:

static void Main()
{
    Form1 myForm = new Form1();
    myForm.Show();

    while (true)
    {
        myForm.UpdateData();

        myForm.Invalidate();
        myForm.Update();

        Thread.Sleep(15);
    }
}

如果您将Form1.cs OnPaint方法改为此方式,则闪烁将消失:

protected override void OnPaint(PaintEventArgs e)
{
    e.Graphics.FillRectangle(new SolidBrush(Color.Red), xPos, yPos, 50, 50);
}

但是,正如其他人所说,我也是这么认为的,WindowsForms并不是创建游戏的最佳选择。