Я пытаюсь предоставить предварительный просмотр документов XPS без зависания потока пользовательского интерфейса. Открытие документа достаточно быстрое, но когда я вызываю GetFixedDocumentSequence (), мой пользовательский интерфейс перестает отвечать на запросы в течение нескольких секунд, пока документ выпадает.
// 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 привязан к потоку, который его создал, поэтому я не могу получить к нему доступ из потока пользовательского интерфейса, и если я пытаюсь вызвать GetPageAsync из рабочего Я получаю исключение, потому что DocumentPages содержат визуальные эффекты.
Единственное, о чем я могу думать, - это создать документ в отдельном потоке пользовательского интерфейса, разбить документ на страницы, а затем сохранить эти страницы в виде файлов XPS, которые открывает поток пользовательского интерфейса. Но это кажется ужасно сложным решением. Кто-нибудь знает, есть ли альтернативный способ получения DocumentPages, который не использует FixedDocumentSequence?