为什么PDFTron PDFViewCtrl.Update()抛出AccessViolationException

本文关键字:抛出 AccessViolationException Update PDFTron PDFViewCtrl 为什么 | 更新日期: 2023-09-27 17:59:06

我在我的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;
    }

为什么PDFTron PDFViewCtrl.Update()抛出AccessViolationException

当文档在后台线程中呈现时,您正在修改文档。跨线程写入共享数据,同时读取它们,可能会导致遇到随机错误。

您需要使用this.PDFViewCtrl.DocLock(true)this.PDFViewCtrl.DocUnlock() 启动和完成ImportAnnotations功能

有关此主题的更多详细信息,请参阅此论坛帖子