我在我的 Windows 商店应用程序项目中使用 PDFTron PDF 注释库。有时,当我尝试将以前完成的注释(另存为单独的文件)加载到 PDFView 控件中时,它会抛出 AccessViolationException。
请帮忙。
在我的页面上,这是代码:
await ImportAnnotations(param.Doc, agendaItem);
this.PDFViewCtrl.Update(); //this is where the exception throws
这是 ImportAnnotations 函数。
private async Task<PDFDoc> ImportAnnotations(PDFDoc doc, AgendaItem GlobalSelectdAgendaItem)
{
try
{
if (doc != null && GlobalSelectdAgendaItem != null)
{
StorageFolder documentsFolder = await StorageFolder.GetFolderFromPathAsync(Path.Combine(ApplicationData.Current.LocalFolder.Path, Global.UserId.ToString(), ApplicationConstants.PDF));
string annotationFileName = GlobalSelectdAgendaItem.ID + "_" + Global.UserId.ToString() + "_" + GlobalSelectdAgendaItem.VersionId + ".xfdf";
// load XFDF annotations
var anntotationFile = await documentsFolder.TryGetItemAsync(annotationFileName) as IStorageFile;
FDFDoc fdfDoc = null;
if (anntotationFile != null)
{
fdfDoc = await FDFDoc.CreateFromXFDFAsync(Path.Combine(documentsFolder.Path, annotationFileName));
}
else
{
return doc;
}
// load PDF with which to merge the annotations
doc.InitSecurityHandler();
// merge in the annotations
doc.FDFMerge(fdfDoc);
doc.RefreshFieldAppearances();
}
}
catch (Exception)
{
}
return doc;
}
最佳答案
当文档在后台线程中呈现时,您正在修改文档。跨线程写入共享数据,同时读取它们,可能会导致您遇到的随机错误。
您需要使用 this.PDFViewCtrl.DocLock(true)
和 this.PDFViewCtrl.DocUnlock()
开始和完成您的 ImportAnnotations 函数
See this forum post for more details on this topic
关于c# - 为什么 PDFTron PDFViewCtrl.Update() 抛出 AccessViolationException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31005338/