C# 位图上的删除不';无法工作,因为另一个进程正在使用该文件(我使用了bitmap.Dispose();)
我正在用C#创建一个Windows窗体应用程序 我在表单上有一些按钮,我使用C# 位图上的删除不';无法工作,因为另一个进程正在使用该文件(我使用了bitmap.Dispose();),c#,visual-studio-2010,bitmap,dispose,delete-file,C#,Visual Studio 2010,Bitmap,Dispose,Delete File,我正在用C#创建一个Windows窗体应用程序 我在表单上有一些按钮,我使用BackgroundImage属性在它们上设置位图图像 我想动态地更改这些图像,以便: 我使用了使用(位图=新位图…并保存了一张新的位图图片 我将新位图分配到按钮上 然后,我试图通过调用Dispose()和System.IO.File.delete(nameToDelete)来删除旧位图 问题是:File.Delete函数抛出一个异常:“文件正被另一个进程使用”,我无法删除它 我还尝试调用GC.Collect()并将位图
BackgroundImage
属性在它们上设置位图图像
我想动态地更改这些图像,以便:
使用(位图=新位图…
并保存了一张新的位图图片Dispose()
和System.IO.File.delete(nameToDelete)
来删除旧位图File.Delete
函数抛出一个异常:“文件正被另一个进程使用”,我无法删除它
我还尝试调用GC.Collect()
并将位图分配给null
,但没有成功
我找到的唯一“解决方案”是在删除之前调用Thread.Sleep(2)
,但它是一个补丁,每次都不起作用
下面是代码(layerPics[z]是一个数组,其中包含所有位图,每个按钮对应一个):
我能做什么?
谢谢 导致问题的不是位图,而是这一行:
Buttons.BackgroundImage = Image.FromFile(name);
在这里,您可以使用工厂方法FromFile()
创建Image
类的实例。在处置图像之前,文件将保持锁定状态
这是。导致问题的不是位图,而是这一行:
Buttons.BackgroundImage = Image.FromFile(name);
在这里,您可以使用工厂方法FromFile()
创建Image
类的实例。在处置图像之前,文件将保持锁定状态
这是。您可以发布格式化的代码吗?这样我们就可以看到您在哪里尝试Dispose
,以及使用的范围在哪里开始/结束。请尝试Thread.Sleep(2000):)永远不要使用Application.DoEvents()
。这是邪恶的!。。。永远不要依赖线程。睡眠
。我只是在原始问题中添加了相关代码。layerPics[z]数组的类型为Image[],但它包含位图图片。您可以发布格式化的代码,以便我们可以看到您在哪里尝试Dispose
,以及使用的范围在哪里开始/结束,请尝试Thread.Sleep(2000):)永远不要使用Application.DoEvents()
。这是邪恶的!。。。永远不要依赖线程。睡眠
。我只是在原始问题中添加了相关代码。layerPics[z]数组的类型为Image[],但它包含位图图片。