[英]File.Delete on bitmap doesn't work because the file is being used by another process (I used bitmap.Dispose();)
我正在用C#创建Windows窗体应用程序。
我在窗体上有一些按钮,并使用BackgroundImage
属性在它们上设置位图图像。
我想动态地更改这些图像,以便:
我using (bitmap = new Bitmap...)
并保存了新的位图图片。
我将新的位图分配到按钮上。
然后,我尝试通过调用Dispose()
然后删除System.IO.File.Delete(nameToDelete)
删除旧的位图;
问题: File.Delete
函数引发异常: “文件正在被另一个进程使用” ,我无法删除它。
我还尝试调用GC.Collect()
并将位图分配为null
但是它不起作用。
我发现的唯一“解决方案”是在删除之前调用Thread.Sleep(2)
,但这是一个修补程序,并非每次都起作用。
这是代码(layerPics [z]是一个包含所有位图的数组,每个按钮一个):
string name = "new name";
Bitmap bitmap;
using (bitmap = new Bitmap(x, y))
{
Form.DrawToBitmap(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height));
bitmap.Save(name);
button.BackgroundImageLayout = ImageLayout.Stretch;
button.BackgroundImage = Image.FromFile(name);
}
layerPics[z].Dispose();
layerPics[z] = null;
layerPics[z] = bitmap;
我能做什么? 谢谢!
导致问题的原因不是Bitmap
,而是以下行:
Buttons.BackgroundImage = Image.FromFile(name);
在这里,您使用工厂方法FromFile()
创建Image
类的实例。 该文件将保持锁定,直到处理完Image
为止。
这是参考 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.