これが私がやろうとしていることです: スレッド B はいくつかの画像をダウンロードし、それらの画像を共有リソースに保存します: Static 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" にイメージをダウンロードできません。この問題を解決するにはどうすればよいですか? または、私がやろうとしていることを達成するためのより簡単な方法はありますか?