当前位置: 代码迷 >> C# >> C#sleep暂停时间越来越小解决方案
  详细解决方案

C#sleep暂停时间越来越小解决方案

热度:116   发布时间:2016-05-05 04:57:15.0
C#sleep暂停时间越来越小
代码很简单 就是在一个窗口里画一个圈,然后控制他移动。但是开始移动时很慢,然后越来越快,越来越快。
        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,每次更新都启动新线程,所以会刷新的越来越快
  相关解决方案