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

时间:2013-03-08 23:00:26

标签: c# telerik task-parallel-library entity-framework-5

我需要从数据库加载一些数据,但因为我需要加载所有数据我的Windows屏幕(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中渲染时,屏幕也会冻结。

1 个答案:

答案 0 :(得分:0)

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

这可能会有所帮助:

在您的ContinueWith中,在开始循环之前致电ListView.BeginUpdate(),并在完成后致电ListView.EndUpdate()

这将阻止列表尝试为您添加到其中的每个项目重绘自己。