有关处理XpsDocument GetFixedDocumentSequence性能问题的任何建议吗?

tac*_*van 5 wpf xpsdocument

我正在尝试提供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?

Ert*_*maa 0

有一个简单的解决方案。它称为多线程 UI,它可以帮助您完成所有操作,但有两个 UI 线程而不是一个。这意味着您的 XPS 可以毫无问题地加载到单独的 UI 线程上。我过去自己实现过,效果很好。

http://blogs.msdn.com/b/dwayneneed/archive/2007/04/26/multithreaded-ui-hostvisual.aspx