在界面上有十几个prictureBox根据业务需要轮流读取3张图片,代码是如下,在配置好的机器上不报错,在配置差的机器上报内存不足,有的是时候报在 System.ArgumentException 中第一次偶然出现的“System.Drawing.dll”类型的异常
        /// <summary>
        /// 加载图片
        /// </summary>
        /// <param name="box"></param>
        /// <param name="url"></param>
        private void LoadPrictureBox(PictureBox box, string url)
        {
            try
            {
                if (box.Image != null)
                {
                    box.Image=null;
                }
                Bitmap bmp = (Bitmap)Bitmap.FromFile(Application.StartupPath + url);
                Bitmap bmpR1 = bmp.Clone() as Bitmap;
                bmp = null;
                Invoke(new MethodInvoker(delegate()
                {
                    box.Image = new Bitmap(bmpR1);
                }));
              
            }
            catch (Exception ex)
            { 
               
            }

解决方案 »

  1.   

    说实话,我觉得就十几个破图不需要用多线程。你是本地图片,又不是google地图。
    多线程能不用就不用。多线程是BUG窝。
      

  2.   

    你尝试用FileSystemWatcher这个组件。我奇怪这个组件很少有人用。它其实非常好用。
    它的作用是监视某个指定文件夹。当此文件夹中的文件被修改或删除或新增都会触发事件。
    在这个场景里,你可以用它来监视你的图片文件夹。并在事件里写加载图片的操作。
    这样,就回避了多线程引起的风险。因为.net已经帮你做好了一切。