|
|
1
14
您需要关闭分配给查看器的xpsdocument从中打开的system.io.packaging.package。此外,如果希望能够在同一应用程序会话中再次打开同一文件,则必须从PackageStore中删除该包。关闭包将释放文件锁并允许您删除该文件,但在从包存储中删除包之前,您将无法重新打开同一个文件(或者更准确地说,同一位置的任何同名文件,即使其内容不同)。 在问题代码的上下文中,在第一个previewWindow.showDialog()之后;在文件.delete(tempxpsfile)之前插入以下内容;
因此,问题中出现的固定代码段变为:
是的,我知道我没有用一个包打开xpsdocument,.net在幕后为我“做”了,忘了自己清理。 |
|
|
2
5
不知道这个问题最初是针对.NET的哪个版本提出的,或者它是否在3.x和4.x之间发生了变化,但是从对.NET 4.0的一些调查来看,解决方案可能比这个简单得多。 xpsdocument实现IDisposable,表示使用后需要dispose()'d。问题在于,IDisposable.Dispose()的实现方式是隐藏的,因此您不能直接调用它。您需要改为调用close()。使用DotPeek分析xpsdocument.dispose():
因此,除非我遗漏了一些东西,否则只需关闭xpsdocument(无论如何您都应该这样做)就可以获得相同的结果,而不必深入挖掘xpsdocument应该处理的内部包管理内容。 |