如何关闭另一个线程打开的文件?

时间:2014-06-05 14:38:27

标签: c#

我使用Image.FromFile加载图像文件的后台线程,我想从另一个线程关闭打开的图像文件

是否有可能在c#中关闭后台线程打开的文件?

修改: 我最初使用此代码 - 在同一个帖子中 - 但我不知道为什么我无法释放文件或将其删除,甚至我使用img.Save(...)保存的新文件。所以我试图强行关闭另一个线程。这就是我提出这个问题的原因。

var img = Image.FromFile(filepath);
img.Save(filepath + ".jpg", ImageFormat.Jpeg);
img.Dispose();
if (File.Exists(filepath+ ".jpg"))
    File.Delete(+ ".jpg");
if (File.Exists(filepath))
    File.Delete(filepath);

1 个答案:

答案 0 :(得分:4)

该文件不是"关闭"直到图像被处理掉。通过使用以下代码段加载图像,只需一步即可打开和关闭文件:

System.Drawing.Bitmap image;
using (var fileLoadImage = System.Drawing.Bitmap.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg"))
{
    image = new System.Drawing.Bitmap(fileLoadImage);
}

您需要非常小心这种模式,因为在完成图像后,您仍然必须明确地调用image.Dispose()。至少这会让你解决文件锁定问题。

祝你好运!

编辑 - 可运行代码段

将以下内容复制并粘贴到新的控制台应用程序中以查看其是否有效。确保你有一个名为" test.jpg"的文件。在您开始之前的示例图片中,您会看到这样就删除了原始文件和新文件:

public class Program
{
    public static void Main(string[] args)
    {
        System.Drawing.Bitmap image;
        var originalFile = @"C:\Users\Public\Pictures\Sample Pictures\test.jpg";
        var newFile = @"C:\Users\Public\Pictures\Sample Pictures\test2.jpg";
        using (var fileLoadImage = System.Drawing.Bitmap.FromFile(originalFile))
        {
            image = new System.Drawing.Bitmap(fileLoadImage);
        }

        image.Save(newFile);
        System.IO.File.Delete(originalFile);

        image.Dispose();
        System.IO.File.Delete(newFile);
    }
}