文件.位图上的删除不起作用,因为文件正在被另一个进程使用(我使用了bitmap. dispose();)
本文关键字:文件 dispose bitmap 进程 删除 位图 不起作用 因为 另一个 | 更新日期: 2023-09-27 18:04:18
我正在用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
被释放之前,该文件一直处于锁定状态。