WPF DocumentViewer で XPS ファイルを表示し、DocumentViewer インスタンスを閉じた後、XPS ファイルがロックされ、削除できません。XPS ファイルのロックを解除して、XPS ファイルを削除し、同じ名前で別のファイルを書き込んで、必要に応じてその新しい XPS ファイルを新しい DocumentViewer インスタンスに表示できるようにする必要があります。アプリを閉じることなく、同じアプリ インスタンスでこれを行う必要があります (これは印刷プレビューのシナリオです)。
つまり、「File.Delete(tempXpsFile);」で例外をスローせずに次のコードを実行するにはどうすればよいでしょうか。声明?
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();
WPF DocumentViewer does not release the XPS fileで説明されているように、アプリを閉じるとファイル ロックが解除されますが、このシナリオではオプションではありません。