多线程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已经帮你做好了一切。