背景:我要播放很多张图片,配上文字。   
方法:我在form上设置了一个picturebox框,然后调用drawimage方法。代码如下
现象:我用两张图片循环播放做试验。遇到的问题是,肉眼基本看到第一张图片。
      第2张图片是一闪而过
问题:请问要怎么处理? 在下一张图片开始播放之前,是否要清除第一张的资源?dispose?
谢谢。大家中秋快乐
程序1)
       一个循环()
       {
           DrawPicandStr("要插入的字","播放的图片");
        }
程序2)
public int DrawPicandStr(string StrWords, string StrPictures)
   {
              ..........
              pictureBox = form1.pictureBox2;
             
             
              newImage = Image.FromFile(StrPictures);
              g.DrawImage(newImage, ulCorner);
     
   }
声明:
/*变量的生命是这样的*/
  public Graphics g;
            System.Windows.Forms.PictureBox pictureBox;
            Font font;
            PointF ulCorner;
            public ImageM()
            {
                ulCorner = new PointF(0.0F, 0.0F);
                //PointF pointF = new PointF(10, 10);
                font = new Font("宋体", 15f);
               
                            }

解决方案 »

  1.   

    循环是一直循环,还是循环到最后一个就结束了,如果是,就是界面被重绘了,你可以在OnPaint事件中绘制
      

  2.   

    播放了A,然后播放B,再播放A,在播放B循环播放
      

  3.   

    切换图片的间隔是不是比较短啊?
    你换图的时候每次都要重新从文件中加载肯定会浪费很多的资源和时间。
    newImage = Image.FromFile(StrPictures);
      

  4.   

    起用多线程的方式也能解决这个问题/// <summary>
            /// 图片跳动
            /// </summary>
            private void CheckStop()
            {
                while (true)
                {
                    try
                    {
                        if (F_1140 == 1)
                        {
                            if (pictureBox1.Width == 140)
                            {
                                pictureBox1.Location = new Point(pictureBox1.Location.X - 5, pictureBox1.Location.Y - 5);
                                pictureBox1.Width = 150;
                                pictureBox1.Height = 150;
                            }
                            else
                            {
                                pictureBox1.Location = new Point(pictureBox1.Location.X + 5, pictureBox1.Location.Y + 5);
                                pictureBox1.Width = 140;
                                pictureBox1.Height = 140;
                            }
                        }
                        else
                        {
                            if (pictureBox1.Width == 140)
                            {
                                pictureBox1.Location = new Point(pictureBox1.Location.X - 5, pictureBox1.Location.Y - 5);
                                pictureBox1.Width = 150;
                                pictureBox1.Height = 150;
                            }
                        }
                        Thread.Sleep(200);
                    }
                    catch(Exception ex)
                    {
                        MessageBox.Show("错误代码001:" + ex.Message);
                    }
                }
            }
      

  5.   


    1. 用ImageList 加载所有的图片, 
    2. 显示时只显示1个图片 , 定时更换此图片对应ImageList的索引即可!
      

  6.   

    正如楼上朋友所说,一个ImageList一个Timer就搞定了。