5

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 を取得する別の方法があるかどうかは誰にもわかりませんか?

4

1 に答える 1