假设要加载大量数据,我希望 UI 在加载数据时能够响应。目前唯一有效的代码是以下不断刷新不需要的 UI 的代码。如何在非 UI 线程中加载数据并在视图中获取最终更新?
private static object sync_lock = new object();
private void Load()
{
MyEntities db = new MyEntities();
TestEntityViewModel testEntityViewModel = (TestEntityViewModel)FindResource("testEntityViewModel");
testEntityViewModel.Source = db.TestEntities.Local; // Source is ObservableCollection<TestEntity>
BindingOperations.EnableCollectionSynchronization(testEntityViewModel.Source, sync_lock);
db.TestEntities.LoadAsync().ContinueWith(new Action<Task>(
(t) =>
{
this.Dispatcher.Invoke(new Action(() =>
{
View.MoveCurrentToFirst();
CommandManager.InvalidateRequerySuggested();
}));
}));
}
注意:如果我删除对 的调用EnableCollectionSynchronization
,则会加载数据,但ICollectionView
它SourceCollection
只有一项。