如何关闭另一个线程打开的文件
本文关键字:文件 线程 何关闭 另一个 | 更新日期: 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);
}
}