如何处理/关闭 "TiffBitmapDecoder" 的流

how Dispose / close stream of "TiffBitmapDecoder"

var filePath= @"c:\user\image.tif";
TiffBitmapDecoder TifDec = new TiffBitmapDecoder(new Uri(path), BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.OnDemand);
File.Delete(pathFile);

抛出异常“System.IO.IOException: '进程无法访问文件 'c:\user\image.tif' 因为它正被另一个进程使用。”

此代码无效

var filePath = @"c:\user\image.tif";
TiffBitmapDecoder TifDec = new TiffBitmapDecoder(new Uri(filePath), BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.OnDemand);
TifDec.Dispatcher.InvokeShutdown();
TifDec.Dispatcher.DisableProcessing();
while (!TifDec.Dispatcher.HasShutdownFinished)
    Thread.Sleep(10);
File.Delete(filePath);

Error screenshot

遗憾的是,似乎没有办法干净地做到这一点。

流在终结器中关闭,但无法强制该代码 运行。它也在 CloseStream 方法中关闭,但这是内部的。

因此请避免使用 Uri 重载。相反,您自己打开文件,并使用 TiffBitmapDecoderStream 重载。然后你可以随意处置流,并在释放流后立即删除文件。当然,放流后就不要再使用TiffBitmapDecoder了。

如果您想更快地删除文件,只需创建一个内存流,用 File.ReadAllBytes 中的数据填充它,然后将其用于解码器。