1

我需要从数据库中加载一些数据,但是因为我需要加载所有这些数据,所以我的 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 中呈现时,屏幕也会冻结。

4

1 回答 1

0

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

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

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

这将防止列表尝试为您添加到其中的每个项目重新绘制自身。

于 2013-03-09T01:27:32.540 回答