如何释放/处置Windows.Data.PdfDocument
How to release / dispose Windows.Data.PdfDocument
下面的代码将在 Windows 10 1709 上抛出 UnauthorizedAccessException
。在 Windows 10(或 8.1)的早期版本中,不会抛出任何异常。如果注释掉 LoadFromFileAsync
行,则不会抛出异常。
private async void Button_Click(object sender, RoutedEventArgs e)
{
var source = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(@"Assets\example.pdf");
var tempFile = await source.CopyAsync(ApplicationData.Current.TemporaryFolder, "my.pdf", NameCollisionOption.ReplaceExisting);
var pdf = await PdfDocument.LoadFromFileAsync(tempFile);
await tempFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
}
由于 PdfDocument
没有提供 free/release 明显声明的资源的方法,这似乎是框架中的一个错误。我能想到的唯一解决方法是通过 LoadFromStreamAsync
传递数据以防止文件被锁定。
那么 PdfDocument
如何在 Windows 10 1709 上正确发布?
尝试删除前的附加屏幕截图:
终于采用了防止 PdfDocument
锁定文件的解决方法:
using (var stream = await tempFile.OpenReadAsync())
{
var pdf = await PdfDocument.LoadFromStreamAsync(stream);
// do something with the document
}
await tempFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
下面的代码将在 Windows 10 1709 上抛出 UnauthorizedAccessException
。在 Windows 10(或 8.1)的早期版本中,不会抛出任何异常。如果注释掉 LoadFromFileAsync
行,则不会抛出异常。
private async void Button_Click(object sender, RoutedEventArgs e)
{
var source = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(@"Assets\example.pdf");
var tempFile = await source.CopyAsync(ApplicationData.Current.TemporaryFolder, "my.pdf", NameCollisionOption.ReplaceExisting);
var pdf = await PdfDocument.LoadFromFileAsync(tempFile);
await tempFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
}
由于 PdfDocument
没有提供 free/release 明显声明的资源的方法,这似乎是框架中的一个错误。我能想到的唯一解决方法是通过 LoadFromStreamAsync
传递数据以防止文件被锁定。
那么 PdfDocument
如何在 Windows 10 1709 上正确发布?
尝试删除前的附加屏幕截图:
终于采用了防止 PdfDocument
锁定文件的解决方法:
using (var stream = await tempFile.OpenReadAsync())
{
var pdf = await PdfDocument.LoadFromStreamAsync(stream);
// do something with the document
}
await tempFile.DeleteAsync(StorageDeleteOption.PermanentDelete);