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

本文关键字:文件 线程 何关闭 另一个 | 更新日期: 2023-09-27 18:06:48

我有一个使用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);

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

在图像被处理之前文件不是"关闭"的。通过使用以下代码段加载图像,在一个步骤中立即打开和关闭该文件:

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()。但至少这会让你绕过文件锁定。

祝你好运!

EDIT - A Runnable Snippet

将以下内容复制并粘贴到一个新的Console应用程序中,看看它是否正常工作。在开始之前,请确保示例图片中有一个名为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);
    }
}