[英]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.