代码很简单 就是在一个窗口里画一个圈,然后控制他移动。但是开始移动时很慢,然后越来越快,越来越快。
int x=20;
int y=20;
private void Form1_Paint( object sender , PaintEventArgs e )
{
Graphics g = e.Graphics;
Pen p = new Pen(Color.Red);
g.DrawEllipse(p , x , y , 20 , 20);
Thread t = new Thread(run);
t.IsBackground = true;
t.Start();
}
private void run()
{
while( true )
{
//x++;
y++;
if( y > 400 )
{
y = 0;
}
Thread.Sleep(30);
this.Invalidate();
}
}
------解决思路----------------------
窗口显示时启动了Form1_Paint事件
Form1_Paint事件中启动了另一个线程,并在新的线程中执行this.Invalidate(),再一次触发了Form1_Paint事件,而Form1_Paint事件又启动一次新线程去执行Run,所以会越来越快
解决方法很简单,把run中的while(true)去掉就OK了
int x=20;
int y=20;
private void Form1_Paint( object sender , PaintEventArgs e )
{
Graphics g = e.Graphics;
Pen p = new Pen(Color.Red);
g.DrawEllipse(p , x , y , 20 , 20);
Thread t = new Thread(run);
t.IsBackground = true;
t.Start();
}
private void run()
{
y++;
if( y > 400 )
{
y = 0;
}
Thread.Sleep(30);
this.Invalidate();
}
------解决思路----------------------
同意2楼,因为每个线程都去更新form,每次更新都启动新线程,所以会刷新的越来越快