我正在尝试在不挂起我的 UI 线程的情况下提供 XPS 文档的实时预览。打开文档的速度足够快,但是当我调用 GetFixedDocumentSequence() 时,我的 UI 会在几秒钟内无响应,而文档突然消失。
// creating the doc is fine (0.005 seconds)
XpsDocument doc=new XpsDocument("BigFile.xps",FileAccess.Read);
// this hangs the UI for several seconds
FixedDocumentSequence seq=XpsDocument.GetFixedDocumentSequence();
// Once I have the sequence, GetPageAsync lets me pull out pages without breaking the UI
// ....
显而易见的解决方案是在工作线程上打开文档,但 FixedDocumentSequence 与创建它的线程相关联,因此我无法从 UI 线程访问它,如果我尝试从工作线程调用 GetPageAsync 我得到一个例外,因为 DocumentPages 包含视觉效果。
我唯一能想到的就是在单独的 UI 线程上创建文档,将文档分成页面,然后将这些页面保存为 UI 线程打开的 XPS 文件。但这似乎是一个非常复杂的解决方案。有谁知道是否有另一种方法可以获取不依赖 FixedDocumentSequence 的 DocumentPages?