在.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中呈现时,屏幕也会冻结

在.net 4中,EF 5加载数据异步

20秒的延迟可能不是在查询运行时发生的,而是由于将所有项添加到列表视图(这必须在UI线程上发生)。

这里有些东西可能会有帮助:

在ContinueWith中,在开始循环之前调用ListView.BeginUpdate(),并在完成循环时调用ListView.EndUpdate()