我正在尝试提供XPS文档的实时预览,而不会挂起我的UI线程.打开文档的速度非常快,但是当我调用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
// ....
Run Code Online (Sandbox Code Playgroud)
显而易见的解决方案是在工作线程上打开文档,但是FixedDocumentSequence与创建它的线程绑定,所以我无法从UI线程访问它,如果我尝试从工作线程调用GetPageAsync,我得到一个例外,因为DocumentPages包含视觉效果.
我唯一能想到的是在单独的UI线程上创建文档,将文档分成页面,然后将这些页面保存为UI线程打开的XPS文件.但这似乎是一个非常复杂的解决方案.有没有人知道是否有另一种方法来获取不依赖于FixedDocumentSequence的DocumentPages?