C# Win 窗体背景动画

本文关键字:动画 背景 窗体 Win | 更新日期: 2023-09-27 17:57:02

我想使用 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
            }
        }
    }
}

这工作正常,但我无能为力。如何在后台运行绘制事件?

C# Win 窗体背景动画

不能在后台运行Paint事件。 它始终在 GUI 线程上触发,尝试从后台线程执行绘图无论如何都会导致跨线程错误。 从后台线程修改Control是违法的。

您要在 Paint 事件处理程序中执行的 while 循环不是 while 循环,而是设置一个触发频率与要更新显示的频率一样高的Timer,并在该计时器的Tick处理程序中调用Invalidate() 。 然后在 Paint 事件处理程序中,通过Control上的字段跟踪您正在进行的迭代并相应地绘制。