Nachdem eine XPS-Datei im WPF DocumentViewer angezeigt und die DocumentViewer-Instanz geschlossen wurde, ist die XPS-Datei gesperrt und kann nicht gelöscht werden. Ich muss die Sperre für die XPS-Datei freigeben, damit ich sie löschen, eine weitere mit dem gleichen Namen schreiben und diese neue XPS-Datei optional in einer neuen DocumentViewer-Instanz anzeigen kann. Ich muss dies in derselben App-Instanz tun - ohne die App schließen zu müssen (dies ist ein Druckvorschau-Szenario).Wie bekomme ich den DocumentViewer von WPF, um seine Dateisperre für das Quell-XPS-Dokument freizugeben?
Mit anderen Worten, wie würde ich den folgenden Code ausführen, ohne eine Ausnahme bei "File.Delete (tempXpsFile);" Erklärung?
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();
File.Delete(tempXpsFile); //this will throw an exception due to a file lock on tempXpsFile
GenerateXpsFile(tempXpsFile); //assume this generates a different file
//otherwise the scenario doesn't make sense as we could just skip the above delete
//and this statement and re-use the same file
previewWindow = new Window();
docViewer = new DocumentViewer();
previewWindow.Content = docViewer;
previewWindow.ShowDialog();
die App Schließen funktioniert die Dateisperre freizugeben, wie in WPF DocumentViewer doesn't release the XPS file erwähnt, aber das ist keine Option in diesem Szenario.
Dieser hat mich erwischt, ich habe einen Viewer, der ein Dokument herunterlädt, sobald es das Dokument eingestellt hat, würde es auch nach dem Anwenden dieser Änderungen fehlschlagen.Als ich das Dokument geladen habe, habe ich das Originaldokument entsorgt, wodurch die Freigabe fehlschlagen würde, wenn ich das Dokument neu laden wollte. –