如何处理/关闭 "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
重载。相反,您自己打开文件,并使用 TiffBitmapDecoder
的 Stream
重载。然后你可以随意处置流,并在释放流后立即删除文件。当然,放流后就不要再使用TiffBitmapDecoder
了。
如果您想更快地删除文件,只需创建一个内存流,用 File.ReadAllBytes
中的数据填充它,然后将其用于解码器。
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
重载。相反,您自己打开文件,并使用 TiffBitmapDecoder
的 Stream
重载。然后你可以随意处置流,并在释放流后立即删除文件。当然,放流后就不要再使用TiffBitmapDecoder
了。
如果您想更快地删除文件,只需创建一个内存流,用 File.ReadAllBytes
中的数据填充它,然后将其用于解码器。