Как я добираюсь, DocumentViewer WPF для выпуска его файла соединяют источник Документ XPS?

Также из командной строки Вы могли работать инструмент jps . Походит

jps -l 

, получит Вас, что Вы хотите.

9
задан Community 23 May 2017 в 12:17
поделиться

1 ответ

Вам необходимо закрыть System.IO.Packaging.Package, из которого был открыт XpsDocument, назначенный программе просмотра. Кроме того, если вы хотите иметь возможность снова открыть тот же файл в том же сеансе приложения, вам придется удалить пакет из PackageStore. Закрытие пакета снимет блокировку файла и позволит вам удалить файл, но вы не сможете повторно открыть тот же файл (или, точнее, любой файл в том же месте с тем же именем, даже если он другое содержимое), пока вы не удалите пакет из PackageStore.

В контексте кода в вопросе вставьте следующее после первого previewWindow.ShowDialog (); перед File.Delete (tempXpsFile);

//Get the Uri from which the system opened the XpsPackage and so your XpsDocument
var myXpsUri = xpsDocument.Uri; //should point to the same file as tempXpsFile

//Get the XpsPackage itself
var theXpsPackage = System.IO.Packaging.PackageStore.GetPackage(myXpsUri);

//THIS IS THE KEY!!!! close it and make it let go of it's file locks
theXpsPackage.Close();

//if you don't remove the package from the PackageStore, you won't be able to
//re-open the same file again later (due to System.IO.Packaging's Package store/caching
//rather than because of any file locks)
System.IO.Packaging.PackageStore.RemovePackage(myXpsUri);

Таким образом, фиксированный сегмент кода, представленный в вопросе, выглядит следующим образом:

var tempXpsFile = @"c:\path\to\Temporary.xps";

var previewWindow = new Window();
var docViewer = new DocumentViewer();
previewWindow.Content = docViewer;

GenerateXpsFile(tempXpsFile);

var xpsDocument = new XpsDocument(tempXpsFile);

previewWindow.ShowDialog();

//BEGIN NEW CODE
var myXpsUri = xpsDocument.Uri; //should point to the same file as tempXpsFile
var theXpsPackage = System.IO.Packaging.PackageStore.GetPackage(myXpsUri);
theXpsPackage.Close();
System.IO.Packaging.PackageStore.RemovePackage(myXpsUri);
//END NEW CODE

File.Delete(tempXpsFile);  //this will succeed now

GenerateXpsFile(tempXpsFile);

previewWindow = new Window();
docViewer = new DocumentViewer();
previewWindow.Content = docViewer;

previewWindow.ShowDialog();

Да, я знаю, что не

14
ответ дан 4 December 2019 в 10:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: