XpsDocumentWriter正在打开一个**源**文件



我有一个例程,可以读取XPS文档并剪切页面以分离文档。最初,它阅读了一份文件,决定如何将其切碎,关闭并写出新文件。

添加了一些功能,在运行例程之前清理旧文件会让人头疼,所以我保存了所有切碎的部分,以便在最后写出。

ChoppedXPS是一个字典,关键是文件名,数据是从原始文件准备的FixedDocument:

foreach (String OneReport in ChoppedXPS.Keys)
{
File.Delete(OneReport);
using (XpsDocument TargetFile = new XpsDocument(OneReport, FileAccess.ReadWrite))
{
XpsDocumentWriter Writer = XpsDocument.CreateXpsDocumentWriter(TargetFile);
Writer.Write(ChoppedXPS[OneReport]);
Logger($"{OneReport} written to disk", 2);
}
Application.DoEvents();
}

如果此处写入的FixedDocument包含图形,则Writer.Write行将打开文件,并保持打开状态,直到程序关闭。

XpsDocumentWriter似乎没有实现任何可以用来清理它的东西。

(是的,Application.DoEvents很难看——这是一个由两个人使用的内部程序,不值得在后台运行,如果没有它,一项足够大的任务可能会导致Windows认为它没有响应并将其扼杀。是的,我知道如何缩进——我把它们拿出来让它都适合这个屏幕。(

.Net 4.5,使用了一些C#8.0功能。

我找到了解决这个问题的方法。我不会试图发布整件事,因为我必须改变整个数据处理,但它的核心是:

using (XPSDocument Source = new XPSDocument(SourceFile, FileAccess.Read)
{
[the using loop from my question]
}

我仍然希望得到理解,并找到比这种方法更合适的方法。

是的——这会产生一个警告,说明Source未使用,但编译器并没有消除它,所以它确实可以工作。

相关内容

最新更新