मैं एक अलग कार्य में डेटा एकत्र कर रहा हूं और मैं डेटा को ObservableCollection<>
का उपयोग करके परिणामस्वरूप जीयूआई घटक में जोड़ना चाहता हूं। तो मेरा कोड इस तरह कुछ चला जाता है:पर्यवेक्षण चयन को कैसे संभालें <> परिणाम एमवीवीएम में समांतर कार्य से परिणाम?
private ObservableCollection<MyItem> _items;
public ObservableCollection<MyItem> Items
{
get { return _items; }
set
{
if (_items.Equals(value))
{
return;
}
_items = value;
RaisePropertyChanged("Items");
}
}
private void LoadData()
{
Task task = Task.Factory.StartNew(() =>
{
ObservableCollection<MyItem> itms = _htmlParser.FetchData(...);
Dispatcher.CurrentDispatcher.Invoke((Action)delegate
{
Items = itms;
});
});
}
डेटा कुछ HTTP अनुरोध करने वाले घटक से प्राप्त किया जाता है। मुझे जो त्रुटि मिल रही है वह है:
Must create DependencySource on same Thread as the DependencyObject.
मैं एमवीवीएम लाइट टूलकिट फ्रेमवर्क का उपयोग कर रहा हूं। मैंने परिणाम को एक संदेश के रूप में भेजने की भी कोशिश की, लेकिन यह एक ही त्रुटि संदेश में समाप्त हो गया। कोई विचार या पॉइंटर्स?
संपादित करें:
public class MyItem
{
public string Id { get; set; }
public string Name { get; set; }
public BitmapImage Image { get; set; } // <--- A big No No because it inherits from the DependencyObject
public Uri Uri { get; set; }
}
मैं एक byte[]
डेटा प्रकार को BitmapImage
बदल: यहाँ मुद्दा है।
यदि आपका कार्य पृष्ठभूमि में हो रहा है, तो यह यूआई को लॉक नहीं करता है, ऐसा लगता है कि पहली चीज जो आप करते हैं वह यूआई थ्रेड में वापस आती है - क्या यह सभी यूआई इनपुट को अवरुद्ध नहीं करेगी _htmlParser डेटा ला रहा है? –
@ मार्टिन, आप एक बहुत अच्छा मुद्दा उठा रहे हैं। जब मैंने सवाल एक साथ रखा, तो मैंने कोड को जल्दी से सरल बना दिया। मैंने अब एक बेहतर कोड प्रवाह के साथ सवाल अद्यतन किया है। –