Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 位图上的删除不';无法工作,因为另一个进程正在使用该文件(我使用了bitmap.Dispose();)_C#_Visual Studio 2010_Bitmap_Dispose_Delete File - Fatal编程技术网

C# 位图上的删除不';无法工作,因为另一个进程正在使用该文件(我使用了bitmap.Dispose();)

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()并将位图

我正在用C#创建一个Windows窗体应用程序

我在表单上有一些按钮,我使用
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[],但它包含位图图片。