使用Image.FromFile不会释放文件句柄

我正在将多个多图像tiff文件连接到单个多图像tiff文件,并且在删除源tiff文件时遇到问题,因为Image类继续保持它们的句柄。

我正在通过Image.FromFile读取tiff图像:

Bitmap resultTiff = (Bitmap) Image.FromFile(strImageFile); 

之后我以相同的方式读取所有其他tiff图像并将它们附加到生成的tiff图像。

当我完成后,我使用此代码来释放引用并保存生成的文件:

 ep.Param[0] = new EncoderParameter(enc, (long) EncoderValue.Flush); resultTiff.SaveAdd(ep); resultTiff.Dispose(); 

现在的问题是文件句柄仍然存在 (因此文件无法删除),除非我在resultTiff.Dispose()调用之后调用GC.Collect()

您可以想象通过调用GC我感觉不舒服,那么还有其他方法可以实现吗?

使用Image.FromFile解决问题的最佳方法是使用Image.FromStream

 using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { using (Image original = Image.FromStream(fs)) { ... 

使用显式Dispose(),using()语句或将值设置为null在垃圾收集发生之前不能解决问题。 强制垃圾收集发生通常是个坏主意。

或尝试:

 Using(Bitmap resultTiff = (Bitmap) Image.FromFile(strImageFile)) { ep.Param[0] = new EncoderParameter(enc, (long) EncoderValue.Flush); resultTiff.SaveAdd(ep); } 

你可以试试:

 resultTiff = null;