在.net 4中,EF 5加载数据异步
本文关键字:加载 数据 异步 EF net | 更新日期: 2023-09-27 18:03:15
我需要从DB加载一些数据,但因为我需要加载所有它我的窗口屏幕(windows窗体)冻结,所以我尝试用这个代码:
var data = Task.Factory.StartNew(() =>
{
repository = ObjectFactory.GetInstance<ILibriRepository>();
librat = repository.GetAll().ToList();//
});
data.ContinueWith((a) =>
{
librat.ForEach(c => lvLista.Items.Add(new LibraListViewItem(c)));
}, CancellationToken.None, TaskContinuationOptions.None, uiScheduler);
但即使这样,当数据加载并需要在ListView中呈现时,屏幕也会冻结
20秒的延迟可能不是在查询运行时发生的,而是由于将所有项添加到列表视图(这必须在UI线程上发生)。
这里有些东西可能会有帮助:
在ContinueWith中,在开始循环之前调用ListView.BeginUpdate()
,并在完成循环时调用ListView.EndUpdate()
。