EF 5负荷数据异步4

问题描述:

我需要从数据库加载一些数据,但是,因为我需要加载它的所有我的Windows屏幕(Windows窗体)被冻结,所以我尝试使用此代码:EF 5负荷数据异步4

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中呈现屏幕冻结。

+0

您添加了多少项?屏幕冻结多久?你确定延续中的代码是造成这种情况的原因吗? – svick 2013-03-08 23:38:25

+0

约1000行渲染需要20秒。 – 2013-03-08 23:45:16

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

这里的一些事情可能会有所帮助:

在你ContinueWith,叫ListView.BeginUpdate()您启动循环之前,并调用ListView.EndUpdate()当您完成。

这将防止列表尝试重新绘制您添加到它的每个项目。