解决方案 »

  1.   

     this.Refresh(); 不是用这个是this.Invalidate();重绘控件
      

  2.   

    上面就是全部代码了?
    你这里
    else if (time % 20 == 0)
                {
                    DateTime dt = DateTime.Now;
                    now = dt;
                    g.DrawString(dt.ToLongTimeString(), ft, blackBlush, 130, 154);
                    time++;
                }
    time等于20次了,你应该将time等于0的吧,重新开始的
      

  3.   

    我改用了this.Invalidate();依旧有很大的延迟
      

  4.   

    继续加也没事啊只要能被20整除
    没看到你else的time++,如果你照ls的改了用this.Invalidate();调用OnPaint还延迟,我想可能是在执行重写的时候先执行基OnPaint方法,你断点看看是不是这样
      

  5.   

    private void timer1_Tick(object sender, EventArgs e)
            {
                Thread thr = new Thread(new ThreadStart(this.refresh));
                thr.Start();
                count++;
            }
    开了一个新线程之后运行了一会儿崩溃了是什么情况啊
      

  6.   


    这样当然崩溃。你会开启N个线程,内存都不够用。 GDI+根本不用开线程。
      

  7.   

     public partial class Chart1 : UserControl
        {
            private DateTime now;
            private Timer timer;
            public Chart1()
            {            timer = new Timer();
                timer.Tick += new EventHandler(timer1_Tick);
                timer.Interval = 50;
                timer.Enabled = true;
                this.DoubleBuffered = true;
            }        
            static int time = 0;
            protected override void OnPaint(PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                Font ft = new Font("Verdana", 10, FontStyle.Regular);
                SolidBrush blackBlush = new SolidBrush(Color.Black);
                test(ft, blackBlush, g);        }        private void test(Font ft, SolidBrush blackBlush, Graphics g)
            {
                if (time == 0)
                {
                    DateTime dt = DateTime.Now;
                   
                    g.DrawString(dt.ToLongTimeString(), ft, blackBlush, 130, 154);
                    time++;
                }
                else if (time % 20 == 0)
                {
                    DateTime dt = DateTime.Now;
                    now = dt;
                    g.DrawString(dt.ToLongTimeString(), ft, blackBlush, 130, 154);
                    time++;
                }
                else
                {
                    g.DrawString(now.ToLongTimeString(), ft, blackBlush, 130, 154);
                    time++;
                }
            }
            private void timer1_Tick(object sender, EventArgs e)
            {            this.Invalidate();
            }
        } 是这样效果?1秒跳一次?
      

  8.   

    您是将.refresh换成了.Invalidate么?如果是这样的话我昨天试过。。好像没有效果
      

  9.   


    是你上面的代码有问题呀,造成编译不通过吧,然后你调试的一直是错的。
     onpaint = true; 《===这个没有定义
                this.Refresh(); 《《这个不是这么用。
                count++; 《===这个没有定义
                onpaint = false; 《===这个没有定义
      

  10.   


    是你上面的代码有问题呀,造成编译不通过吧,然后你调试的一直是错的。
     onpaint = true; 《===这个没有定义
                this.Refresh(); 《《这个不是这么用。
                count++; 《===这个没有定义
                onpaint = false; 《===这个没有定义不好意思吖我有些定义是为了测试用的后来没删掉~那我现在试试看
      

  11.   

    代码在思路上是错误的,
    Onpaint事件,是windows事件中一种低优先级的操作,于是windows会尽可能把这个绘图事件往后推,
    而你的time++却正好放在这个从来不准时的OnPaint事件里处理.那不可能正确的
      

  12.   


    是你上面的代码有问题呀,造成编译不通过吧,然后你调试的一直是错的。
     onpaint = true; 《===这个没有定义
                this.Refresh(); 《《这个不是这么用。
                count++; 《===这个没有定义
                onpaint = false; 《===这个没有定义您在我之前的代码上修改了哪些啊?您的就可以用。。我的就会有延迟。
      

  13.   


    是你上面的代码有问题呀,造成编译不通过吧,然后你调试的一直是错的。
     onpaint = true; 《===这个没有定义
                this.Refresh(); 《《这个不是这么用。
                count++; 《===这个没有定义
                onpaint = false; 《===这个没有定义您在我之前的代码上修改了哪些啊?您的就可以用。。我的就会有延迟。
     private DateTime now;
            private Timer timer; 《===这里
            public Chart1()
            {
     
                timer = new Timer(); 《===这里
                timer.Tick += new EventHandler(timer1_Tick); 《===这里
                timer.Interval = 50; 《===这里
                timer.Enabled = true;《===这里
                this.DoubleBuffered = true;
            }
     
     private void timer1_Tick(object sender, EventArgs e)
            {
     
                this.Invalidate();  《===这里
            }
      

  14.   

    这些timer的定义可以修改的吖~不一定要用代码修改吧?