具体的案例如下:    前台数据采集模块每50毫秒采集若干数据,然后在后台实时绘制相应的曲线,具体原理类同与医院里用于监控病人的心率等参数的监控器程序。在此,我采用了每50毫秒在 PictureBox 控件里重新绘制其曲线,不停的 Refresh(),结果发现屏幕不停的闪动,而且过不了太长的时间,系统就崩溃了。我知道在 Delphi 中,多采用在内存中绘制当前的曲线图形,然后在该控件中贴图,这样,所绘制的图形的实时性便有了保证,而且也不会闪屏,但是,我不知道用C#开发此程序时,具体的细节又该如何实现呢?还望各位大虾指点一二。

解决方案 »

  1.   

    参考:【翻译】一个简单的性能监视及绘制控件
    http://bbs.msproject.cn/Default.aspx?g=posts&t=242【翻译】Windows系统性能检视及绘制
    http://bbs.msproject.cn/Default.aspx?g=posts&t=462
      

  2.   

    简单的,你可以先new一个bitmap,在这个bitmap上画图,画完了,再把这个图帖到控件上去。
    vs2005里提供了一个类,专门用于双缓冲画图,好像是buffergraphics和buffergraphicscontext类,你看看msdn。
      

  3.   

    double buffer
    先内存新建一个bmp
    画在上面
    然后drawimage到控件上
      

  4.   

                   这个是简单的双缓冲。。参考参考吧Graphics displayGr5aphics = this.CreateGraphics();
                    Random r = new Random();
                    Image i = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);
                    Graphics g = Graphics.FromImage(i);
                    OutNum = ClientRectangle.Width;
                    inNum = ClientRectangle.Height;
                    g.FillRectangle(Brushes.White, ClientRectangle);
                    OutNum = 1;
                    inNum = ClientRectangle.Width;
                    for (int x = 0; x <= ClientRectangle.Width; x++)
                    {
                        for (int y = 0; y < ClientRectangle.Height; y += 10)
                        {
                            Color c = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255));
                            Pen p = new Pen(c, 1);
                            g.DrawLine(p, new Point(0, 0), new Point(x, y));
                            p.Dispose();                        add = y;
                        }
                        if (OutNum != ClientRectangle.Width)
                            OutNum =x;
                    }
                    displayGr5aphics.DrawImage(i, ClientRectangle);
                    i.Dispose();