2010-06-25 11 views
5

UI iş parçacığı takmadan XPS belgelerinin canlı önizlemesini sağlamaya çalışıyorum. Belgeyi açmak yeterince hızlıdır, ancak GetFixedDocumentSequence() işlevini çağırdığımda, kullanıcı arabirimim çektiği sırada birkaç saniye boyunca yanıt vermemeye başlar.XpsDocument GetFixedDocumentSequence performans sorunları ile ilgili herhangi bir öneriniz var mı?

// 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 
// .... 

bariz bir çözüm işçi iş parçacığı üzerinde belgeyi açmak için, ama FixedDocumentSequence oluşturulduğu iş parçacığı bağlıdır, bu yüzden aramayı deneyin eğer ben UI iş parçacığı onu erişebilir ve olamaz Çalışan iş parçacığından GetPageAsync, DocumentPages görsel içerdiğinden bir istisna alıyorum.

Düşünebildiğim tek şey, belgeyi ayrı bir UI iş parçacığı üzerinde oluşturmak, belgeyi sayfalara ayırmak ve ardından bu sayfaları UI iş parçacığının açtığı XPS dosyaları olarak kaydetmek. Ama bu korkunç derecede karmaşık bir çözüm gibi görünüyor. FixedDocumentSequence güvenmiyor DocumentPages almak için alternatif bir yolu olup olmadığını bilen var mı?

cevap

1

Basit bir çözüm var. Çok iş parçacıklı kullanıcı arabirimi olarak adlandırılır ve yaptığınız gibi her şeyi yapmanıza yardımcı olur, ancak bir yerine iki kullanıcı arabirimi iş parçacığına sahip olursunuz. Bu, XPS'inizin herhangi bir sorun olmadan ayrı bir UI iş parçacığına yüklenebileceği anlamına gelir. Geçmişte kendimi uygularım ve bu iyi.

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

İlgili konular