C#Win形成背景动画

C#Win形成背景动画,c#,multithreading,winforms,background,C#,Multithreading,Winforms,Background,我想使用paint事件创建一个具有动画背景的窗口。 像这样: using System; using System.Drawing; using System.Windows.Forms; using System.Threading; namespace DrawGUI { public partial class Form1 : Form { public Form1() { InitializeComponent()

我想使用paint事件创建一个具有动画背景的窗口。 像这样:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;

namespace DrawGUI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            int w = this.ClientSize.Width;
            int h = this.ClientSize.Height;

            g.DrawLine(Pens.Red, 0, h / 2 - 20, w, h / 2 - 20);

            int a = 0;
            while (true)
            {
                a++;
                g.DrawRectangle(Pens.Gray, a, h / 2 - 20, 40, 40);
                g.DrawRectangle(Pens.Red, a, h / 2 - 20, 40, 40);
                Thread
            }
        }
    }
}

这很好,但我不能做任何其他事情。如何在后台运行绘制事件?

您不能在后台运行
绘制事件。它总是在GUI线程上触发,并且尝试从后台线程进行绘图将导致跨线程错误。从后台线程修改
控件
是非法的


Paint
事件处理程序中,您要做的不是while循环,而是设置一个
Timer
,当您想要更新显示时,它会频繁触发,并在该定时器的
勾选
处理程序调用
Invalidate()
。然后在
Paint
事件处理程序中,通过
控件上的一个字段跟踪正在进行的迭代,并相应地绘制。

当然,你不能做任何其他事情,你有一个无限循环。你需要一本关于基本动画技术的书。这不是一个真正的基础教程论坛谢谢,我要试试