解决方案 »

  1.   

    窗口显示时启动了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.   

    同意2楼,因为每个线程都去更新form,每次更新都启动新线程,所以会刷新的越来越快
      

  3.   

    建议把线程放到其他函数中,而不是paint事件中