循环显示图片代码,图片少的时候没问题。当图片多于200张的时候。循环显示就会变得很慢。就算timer触发为1ms也很慢。请问为什么如何解决?namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int i;
        List<Image> lst = new List<Image>();
        DirectoryInfo di = new DirectoryInfo(@"C:\qq1");//保存图片 
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Space)
            {
                timer1.Enabled = true;
                label2.Visible = false;
            }
            if (e.KeyCode == Keys.Enter)
            {
                timer1.Enabled = false;
            }
            if (e.KeyData == Keys.Escape) Application.Exit();
            {
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
           
            foreach (FileInfo fi in di.GetFiles("*.jpg"))
            {
             lst.Add(Image.FromFile(fi.FullName));
            } 
            if (i>=lst.Count)
            {
                i = 0;
            }
            else
            {
                this.pictureBox1.Image = lst[i];
                pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize; 
                i = i + 1; 
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
           //this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
           //this.WindowState = FormWindowState.Maximized;
            
            pictureBox1.Left = 312;
           pictureBox1.Top = 184;
        }    }
}

解决方案 »

  1.   

      private void timer1_Tick(object sender, EventArgs e)
            {
               
    if(lst.Count==0)
    {            
    foreach (FileInfo fi in di.GetFiles("*.jpg"))
                {
                 lst.Add(Image.FromFile(fi.FullName));
                } 
    }
    ........
      

  2.   

    foreach(string f in Directory.GetDirectories("D:\\", "*.jpg", SearchOption.AllDirectories);
    {
    FileInfo fi = new FileInfo(f);

     
    文件太多,分文件夹保存
      

  3.   

    i =i>lst.Count? 0:i;foreach (FileInfo fi in di.GetFiles("*.jpg"))
                {
                 lst.Add(Image.FromFile(fi.FullName));
                } 
    不要在timer_click中
      

  4.   

    善意提醒,你在Tick中这么处理,每次重新生成一个Image对象, foreach (FileInfo fi in di.GetFiles("*.jpg"))
     {
       lst.Add(Image.FromFile(fi.FullName));
     } 最终会OutOfMemory!
    你完全可以考虑放到其他方法里一次性加载完这些图片,1#这样判断一次也是可以的.
      

  5.   

    做到上面的就够了……
    to :Anakin_Skywalker
    我也感觉还是异步好
      

  6.   

           foreach (FileInfo fi in di.GetFiles("*.jpg"))
                {
                 lst.Add(Image.FromFile(fi.FullName));
                } 每次都获取了一次目录这样不好
    建议 在 使用前 把所有文件列表存入数组 便利数组
      

  7.   

    private void timer1_Tick(object sender, EventArgs e)
      {
        
    if(lst.Count==0)
    {   
    foreach (FileInfo fi in di.GetFiles("*.jpg"))
      {
      lst.Add(Image.FromFile(fi.FullName));
      }  
    }
    ........
      

  8.   

    foreach (FileInfo fi in di.GetFiles("*.jpg"))
      {
      lst.Add(Image.FromFile(fi.FullName));
      }  每次都获取了一次目录这样不好
    建议 在 使用前 把所有文件列表存入数组 便利数组