2010-06-25 16 views
5

मैं अपने यूआई थ्रेड को लटकाने के बिना एक्सपीएस दस्तावेजों का लाइव पूर्वावलोकन प्रदान करने की कोशिश कर रहा हूं। दस्तावेज़ खोलना काफी तेज़ है, लेकिन जब मैं GetFixedDocumentSequence() को कॉल करता हूं, तो मेरा यूआई कई सेकंड के लिए उत्तरदायी नहीं होता है जबकि दस्तावेज़ बंद हो जाता है।XpsDocument 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 मुझे अपवाद मिलता है क्योंकि दस्तावेज़पृष्ठ में दृश्य होते हैं।

एकमात्र चीज जिसे मैं सोच सकता हूं, एक अलग यूआई थ्रेड पर दस्तावेज़ बनाना है, दस्तावेज़ों को दस्तावेज़ों में तोड़ना है, और फिर उन पृष्ठों को एक्सपीएस फाइलों के रूप में सहेजें जो यूआई थ्रेड खुलता है। लेकिन यह एक जटिल जटिल समाधान की तरह लगता है। क्या किसी को पता है कि क्या दस्तावेज़पेज प्राप्त करने का कोई वैकल्पिक तरीका है जो फिक्स्ड डॉक्यूमेंट्स पर निर्भर नहीं है?

उत्तर

1

एक आसान समाधान है। इसे बहु-थ्रेडेड यूआई कहा जाता है और यह आपको सबकुछ करने में मदद करता है जैसा कि आप करेंगे, लेकिन एक के बजाय दो यूआई धागे हैं। इसका मतलब है कि आपका एक्सपीएस बिना किसी समस्या के अलग यूआई थ्रेड पर लोड हो सकता है। मैंने इसे अतीत में लागू किया है, और यह अच्छा है।

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

संबंधित मुद्दे