我需要从数据库加载一些数据,但因为我需要加载所有数据我的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中渲染时,屏幕也会冻结。
答案 0 :(得分:0)
在查询运行时可能没有出现20秒延迟,但是由于将所有项添加到列表视图(必须在UI线程上发生)。
这可能会有所帮助:
在您的ContinueWith中,在开始循环之前致电ListView.BeginUpdate()
,并在完成后致电ListView.EndUpdate()
。
这将阻止列表尝试为您添加到其中的每个项目重绘自己。