नमस्ते मैं async कार्य में ObservableCollection (AddRange) का उपयोग करना चाहता हूं लेकिन मुझे NotSupportedException मिलता है

private ObservableCollection<CoronavirusCountry> _data = new ObservableCollection<CoronavirusCountry>();
        public ObservableCollection<CoronavirusCountry> data
        {
            get => _data;
            set => SetProperty(ref _data, value);
        }

Task.Run(async()=>{
   APIService service = new APIService();
            data.AddRange(await service.GetTopCases());
            Status = "Updated " + DateTime.Now;

});
-1
Atena 19 जुलाई 2020, 09:27

1 उत्तर

सबसे बढ़िया उत्तर

सुनिश्चित नहीं है कि आप किस AddRange विधि का जिक्र कर रहे हैं, क्योंकि ऑब्जर्वेबल कोलेक्शन में वह आउट ऑफ द बॉक्स नहीं है।

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

नीचे दिखाया गया प्रतीक्षित तरीका पर्याप्त होना चाहिए। यह एसिंक्रोनस सर्विस कॉल की प्रतीक्षा करेगा, और मुख्य थ्रेड में संग्रह को अपडेट करेगा।

public async Task UpdateData()
{
    var service = new APIService();
    var newData = await service.GetTopCases();

    Data.AddRange(newData); // use proper naming!

    Status = "Updated " + DateTime.Now;
}

उपरोक्त विधि को कॉल करने और प्रतीक्षा करने के लिए, आपके पास इस तरह एक एसिंक लोडेड ईवेंट हैंडलर हो सकता है:

public MainWindow()
{
    InitializeComponent();

    viewModel = new ViewModel();

    Loaded += async (s, e) => await viewModel.UpdateData();
}
1
Clemens 19 जुलाई 2020, 07:23