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
}
}
}
}
这工作正常,但我无能为力。如何在后台运行绘制事件?
不能在后台运行Paint
事件。 它始终在 GUI 线程上触发,尝试从后台线程执行绘图无论如何都会导致跨线程错误。 从后台线程修改Control
是违法的。
您要在 Paint
事件处理程序中执行的 while 循环不是 while 循环,而是设置一个触发频率与要更新显示的频率一样高的Timer
,并在该计时器的Tick
处理程序中调用Invalidate()
。 然后在 Paint
事件处理程序中,通过Control
上的字段跟踪您正在进行的迭代并相应地绘制。