C# 如何释放/处置Windows.Data.PDF文档
下面的代码将在Windows 10 1709上引发一个C# 如何释放/处置Windows.Data.PDF文档,c#,pdf,windows-10,windows-8.1,C#,Pdf,Windows 10,Windows 8.1,下面的代码将在Windows 10 1709上引发一个UnauthorizedAccessException。在以前版本的Windows 10(或8.1)上,不会引发异常。如果注释掉带有LoadFromFileAsync的行,则不会引发异常 private async void Button_Click(object sender, RoutedEventArgs e) { var source = await Windows.ApplicationModel.Package.Curren
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
没有提供释放/释放资源的方法,这似乎是框架中的一个bug。我能想到的唯一解决方法是通过LoadFromStreamAsync
传递数据,以防止文件被锁定
那么如何在Windows101709上正确发布PdfDocument
尝试删除之前的其他屏幕截图:
最后采用了解决方法,以防止
PdfDocument
锁定文件:
using (var stream = await tempFile.OpenReadAsync())
{
var pdf = await PdfDocument.LoadFromStreamAsync(stream);
// do something with the document
}
await tempFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
你有没有试着整理资源?System.Runtime.InteropServices.Marshal.ReleaseComObject(pdf)@Florian:谢谢,如果我添加此调用,也会遇到同样的问题。您是否尝试过不使用“异步解决方案”?您遇到的问题似乎与pdf本身无关,但更多的是关于“权限”,您是否以管理员模式运行应用程序?是的,异常消息实际上更像是“权限被拒绝”。但是,如果我注释掉删除部分并重新运行程序只是为了删除文件,它就可以工作了。因此,这肯定是某种资源/句柄泄漏。