簡體   English   中英

異步任務中的 ObservableCollection AddRange

[英]ObservableCollection AddRange in async Task

您好我想在異步任務中使用 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;

});

不確定您指的是哪個AddRange方法,因為 ObservableCollection 沒有開箱即用的方法。

不管怎樣——假設你寫了一個擴展方法——它必須在 UI 線程中調用,所以運行一個 Task 沒有意義。

下面顯示的 awaitable 方法應該足夠了。 它將等待異步服務調用,並在主線程中更新集合。

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM