异步任务中的 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 线程中调用,所以 运行 任务没有意义。
下面显示的等待方法应该足够了。它将等待异步服务调用,并在主线程中更新集合。
public async Task UpdateData()
{
var service = new APIService();
var newData = await service.GetTopCases();
Data.AddRange(newData); // use proper naming!
Status = "Updated " + DateTime.Now;
}
为了调用和等待上述方法,您可以使用如下所示的异步 Loaded 事件处理程序:
public MainWindow()
{
InitializeComponent();
viewModel = new ViewModel();
Loaded += async (s, e) => await viewModel.UpdateData();
}
你好,我想在异步任务中使用 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 线程中调用,所以 运行 任务没有意义。
下面显示的等待方法应该足够了。它将等待异步服务调用,并在主线程中更新集合。
public async Task UpdateData()
{
var service = new APIService();
var newData = await service.GetTopCases();
Data.AddRange(newData); // use proper naming!
Status = "Updated " + DateTime.Now;
}
为了调用和等待上述方法,您可以使用如下所示的异步 Loaded 事件处理程序:
public MainWindow()
{
InitializeComponent();
viewModel = new ViewModel();
Loaded += async (s, e) => await viewModel.UpdateData();
}