Después de mostrar un archivo XPS en WPF DocumentViewer y cerrar la instancia de DocumentViewer, el archivo XPS está bloqueado y no puedo eliminarlo. Necesito liberar el bloqueo en el archivo XPS para poder eliminarlo, escribir otro con el mismo nombre y, opcionalmente, mostrar ese nuevo archivo XPS en una nueva instancia de DocumentViewer. Necesito hacer esto en la misma instancia de la aplicación, sin tener que cerrar la aplicación (este es un escenario de Vista previa de impresión).¿Cómo hago para que el DocumentViewer de WPF libere su bloqueo de archivos en el documento XPS de origen?
En otras palabras, ¿cómo obtendría el siguiente código para ejecutar sin lanzar una excepción en el "File.Delete (tempXpsFile);" ¿declaración?
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();
Cierre de la aplicación hace liberar el bloqueo de archivo, como se menciona en WPF DocumentViewer doesn't release the XPS file, pero eso no es una opción en este escenario.
Este me llamó, tengo un visor que descarga un documento, una vez que estaba configurando el documento, fallaría incluso después de aplicar estos cambios.Cuando estaba cargando el documento, estaba desechando el documento original, lo que haría que la versión fallara cuando fui a volver a cargar el documento. –