日期:2014-05-17  浏览次数:20737 次

多线程prictureBox加载图片问题
在界面上有十几个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)
  { 
   
  }

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