C#Win形成背景动画
我想使用paint事件创建一个具有动画背景的窗口。 像这样: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()
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
事件处理程序中,通过控件上的一个字段跟踪正在进行的迭代,并相应地绘制。当然,你不能做任何其他事情,你有一个无限循环。你需要一本关于基本动画技术的书。这不是一个真正的基础教程论坛谢谢,我要试试