Как правильно закрыть файл, используемый PDFTron? - PullRequest
1 голос
/ 20 апреля 2020

Следующий код вызывает исключение System.InvalidOperationException, поскольку рассматриваемый файл все еще используется. В документации PDFTron нет четких указаний о том, как следует закрывать файл, но следующее дает исключение:

// in my dispose method. _pdfViewWpf is a pdftron.PDF.PDFViewWPF, and _pdfPath is the filepath I set the doc to. 
_pdfViewWpf.CloseDoc();
_pdfViewWpf.Dispose();

File.Move(_pdfPath, @"C:\myFilePath\Test.pdf");

Чего мне не хватает, чтобы PDFTron правильно освободил и закрыл файл?

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

Я пропустил вызов Dispose () в PDFDo c, который я установил как Do c в PDFViewWPF. Я сохранил это в закрытой переменной-члене:

_pdfDoc = new PDFDoc(pdfPath);

И добавил эту строку в мой метод dispose:

_pdfViewWpf.CloseDoc();
_pdfViewWpf.Dispose();
if (_pdfDoc != null) _pdfDoc.Dispose();

File.Move(_pdfPath, @"C:\myFilePath\Test.pdf");

Теперь метод File.Move работает без исключения.

1 голос
/ 20 апреля 2020

Спасибо за отзывы о наших руководствах, мы постараемся улучшить эту часть. У нас есть много примеров кода в наших примерах проектов, поэтому вы также можете увидеть, как это сделать на практике.

Для неинтерактивной обработки PDF оператор using является самым простым способом обеспечить дескрипторы файлов и память освобождаются сразу же, когда это делается с экземпляром PDFDo c.

Для интерактивного просмотра вы можете сделать следующее.

PDFDoc oldDoc = _pdfViewWpf.GetDoc();
_pdfViewWpf.CloseDoc();
// or instead of above line, if you want to reuse the viewer call 
//_pdfViewWpf.SetDoc(otherPDFDoc);
if(oldDoc != null) oldDoc.Close();
...