这是我想做的事情:线程 B 将下载一些图像并将这些图像存储在共享资源中:静态 ArrayList IMBuffer;线程 A 将从 IMBuffer 中获取图像并对其进行处理。以下是我得到的:
线程 B:
// 做点什么
System.Net.WebClient myWebClient = new System.Net.WebClient();
try
{ myWebClient.DownloadFile(pth, "BufferImg"); }
catch
{ // some stuff }
// add new dled image to IMBuffer
fs = new FileStream("BufferImg", FileMode.Open, FileAccess.Read);
Image img = Image.FromStream(fs);
lock (IMBuffer)
{ IMBuffer.Add(img); }
img.Dispose();
lock (IMRequest) { IMRequest.RemoveAt(0); }
myWebClient.Dispose();
//fs.Dispose();
// File.Delete("BufferImg");
// 做其他事情
线程 A:
// do something
Image nextImg;
lock (IMBuffer)
{
nextImg = (Image)IMBuffer[0];
nextImg.Save(DLedIM);
}
// do something else
这是我遇到的问题;由于 IMBuffer 中的图像是使用文件流打开的,因此在处理流时,该行:nextImg.Save(DLedIM); 导致“文件被另一个进程使用”错误。但是,如果 fs.Dispose(); 注释掉该行,则程序锁定“BufferImg”,结果第一次后无法将图像下载到“BufferImg”。我应该怎么做才能解决这个问题?或者有没有更简单的方法来完成我想做的事情?