我跟踪了Stephen Cleary的this博客,我想知道更新现有集合的最佳方法是什么,该集合限制在每15秒更新一次的UI中? 对于例如清除列表然后添加新集合以创建新对象?
我问这个问题,因为当我添加这个Task taskA = Task.Run(() => UpdateManifest(_ManifestToken.Token));
代码行时,我的CPU会迅速增加。
C#:
// Ctor.
public ManifestViewModel()
{
_ManifestItems = new NotifyTaskCompletion<ObservableCollection<ManifestItem>>(FetchData());
Task taskA = Task.Run(() => UpdateManifest(_ManifestToken.Token));
}
private NotifyTaskCompletion<ObservableCollection<ManifestItem>> _ManifestItems;
public NotifyTaskCompletion<ObservableCollection<ManifestItem>> ManifestItems
{
get => _ManifestItems;
set
{
if (_ManifestItems != value)
{
_ManifestItems = value;
OnPropertyChanged();
}
}
}
public static Task UpdateManifest(CancellationToken token)
{
while (true)
{
_ManifestItems = new NotifyTaskCompletion<ObservableCollection<ManifestItem>>(FetchData());
Task.Delay(15000);
}
}
答案 0 :(得分:1)
您应该在后台线程上获取数据并更新UI线程上的源集合。您还可以使用BindingOperations.EnableCollectionSynchronization方法启用从后台线程更新数据绑定集合。
比从构造函数调用ViewModel
并使用Updatemanifest
循环更好的方法是使用Timer以给定的时间间隔获取数据,例如:
while (true)