gpt4 book ai didi

c# - 将图像存储在 arrayList 中

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:48 24 4
gpt4 key购买 nike

这是我正在尝试做的事情:线程 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”。我应该怎么做才能解决这个问题?还是有更简单的方法来完成我想做的事情?

最佳答案

这应该有效:

byte[] buffer;
using (FileStream fs = new FileStream("BufferImg", FileMode.Open, FileAccess.Read))
{
buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
}
using(Image img = Image.FromStream(new MemoryStream(buffer))
{
//...
}

使用 MemoryStream 可以避免必须保留 FileStream - 此时图像与文件根本没有任何连接,因此您应该文件锁定没有任何问题。

关于c# - 将图像存储在 arrayList 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6619743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com