我遇到的情况是这样的:1.TrackArray2 数组会不断变大,最快0.5秒增长1个,考虑超过1000的情况,不知道这样写会有什么问题吗? 
有更好的解决办法吗?
        int i = 0;
        PointF[] TrackArray = new PointF[100];
        PointF[] TrackArray2;
        TrackArray[i] = new PointF(x, y);
        TrackArray2 = new PointF[i + 1];
        Array.Copy(TrackArray, 0, TrackArray2, 0, i + 1); 
        i++;        //其他部分的代码说明如下
        mypaint2 = new ipaint2(TrackPaint);
        pictureBox2.Invoke(mypaint2);
        public void TrackPaint()
        {
            getposition.DrawTrack(TrackArray2,pictureBox2);
        }2.我把数组和PictureBox作为参数传进来,然后如下面那样把数组里的点绘制成线。
        public void DrawTrack(PointF[] sp, PictureBox p)
        {
            Graphics g = p.CreateGraphics();
            g.Clear(Color.Black);
            for (int i = 0; i < sp.Count(); i++)
            {
                g.DrawString(i.ToString(), new Font("Arial", 9), new SolidBrush(Color.Red), sp[i]);
                g.DrawLines(new Pen(Brushes.Red), sp);
                //g.Dispose();
            }
        }
我期望达到的效果的是,点数组每多一个,那么picturebox里便整个进行一次重绘,流畅的进行。但是一旦有10多个点的时候,就会闪烁,再多点的时候就更不上数组增长的速度了。我看了MSDN上关于Graphics的说明,还有相关的图形入门,还有其他的资料,猜测这种情况会不会是因为我每次绘制完之后没有把 “g” 给 Dispose掉,但是直接写在最后又会报错,查来查去也不知道该怎么正确使用 Dispose();求指点!我觉得我采用的这种绘制方法是很笨的方法,有没有神奇的方法? 查来查去说绘图应该用GDI+,看了一下还是觉得不知道用,请过来的人指点一下现在该看什么书什么资料,直接给链接或者教程更好!当数组有1000个点时,那么绘制起来是不是会非常的耗时? 有什么解决之道吗? 请指点。还有,我想New出一个新窗口装Picturebox,新建另一个线程来专门处理更新数组。
然后 Picturebox.Invoke(); 更新Picturebox。这样做法可以吗? 有没有更好的方法?

解决方案 »

  1.   

    还有,我想New出一个新窗口装Picturebox,新建另一个线程来专门处理更新数组。
    然后 Picturebox.Invoke(); 更新Picturebox。这样做法可以吗? 有没有更好的方法?
    只能如此。
      

  2.   

    用集合吧,少年,不要直接在picturebox里面画图,先画在bitmap上面
      

  3.   


    为什么呢? 我试试。画在Bitmap上的话是不是就可以双缓冲了。
      

  4.   

    直接在Picturebox画点,每画一个,屏幕就要重绘,所以会有闪烁
    所以要先画在一个bitmap中,全部画完,再把整个bitmap画到Picturebox里,这样就不会闪了
    就是所谓的缓冲技术