बनाएं मैं ग्रेवटर-छवियों को लोड करना चाहता हूं और उन्हें कोड से पीछे एक WPF छवि-नियंत्रण में सेट करना चाहता हूं। तो कोड लग रहा हैWPF छवि लोड async
imgGravatar.Source = GetGravatarImage(email);
कहाँ GetGravatarImage तरह लग रहा है जैसे:
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(GravatarImage.GetURL("http://www.gravatar.com/avatar.php?gravatar_id=" + email) , UriKind.Absolute);
bi.EndInit();
return bi;
दुर्भाग्य से इस जीयूआई ताले जब नेटवर्क कनेक्शन धीमा है। क्या छवि-स्रोत असाइन करने का कोई तरीका है और इसे यूआई को अवरुद्ध किए बिना पृष्ठभूमि में छवि को लोड करने दें?
धन्यवाद!
BitmapImage भी एक [उरी पैरामीटर के साथ निर्माता] है (http://msdn.microsoft.com/en-us/library/ms602473.aspx) है, जो आप BeginInit/EndInit कॉल की बचत होगी। – Clemens
+1 इसके बारे में नहीं पता था, अच्छा संकेत। मैंने अभी लेखक से कोड कॉपी किया है और वास्तविक डाउनलोडिंग को अनुकूलित करने के बारे में नहीं सोचा था, इसके बजाय मैंने यूआई ब्लॉक मुद्दे को एक सुरुचिपूर्ण तरीके से हल करने पर ध्यान केंद्रित किया (और निश्चित रूप से यह ब्लॉक करता है, अगर कोड एसिंक नहीं है)। मुझे दोहराव के उपयोग के बारे में लगता है, कनवर्टर को बाध्यकारी से पूरा यूआरएल ईमेल की बजाय अधिक पुन: प्रयोज्य होने के लिए भी मिल सकता है। मैं 'थ्रेडपूल' का उपयोग करके नापसंद करता हूं क्योंकि आपको हर समय प्रेषण का प्रबंधन करना होता है। यह शुद्ध एमवीवीएम अनुप्रयोग के लिए मेरे लिए पर्याप्त सुरुचिपूर्ण नहीं बनाता है। – JanW
क्या आप स्पष्टीकरण दे सकते हैं कि बिटमैप इमेज क्यों बनाते हैं जब अतुल्यकालिक रूप से नहीं कहा जाता है। फिर इसके पास 'IsDownloading' प्रॉपर्टी और' डाउनलोड पूर्ण 'ईवेंट क्यों है। यदि आप एक्सएएमएल में एक छवि नियंत्रण की 'स्रोत' संपत्ति को एक यूआरएल पर सेट करते हैं जो वेब पर एक बड़ी छवि का संदर्भ देता है, तो यूआई ब्लॉक नहीं करेगा। इसके बजाय WPF पृष्ठभूमि में छवि को डाउनलोड करता है और जैसे ही डाउनलोड समाप्त हो जाता है, इसे दिखाता है। – Clemens