我使用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);
答案 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);
}
}