在向列表控件添加项目时,UI会冻结

时间:2014-10-08 22:39:54

标签: c++ mfc listcontrol

当我点击按钮将项目添加到列表控件时,我的应用程序冻结了。我做得很简单:

for (unsigned i = 1; i < 15000;++i)
{
  listcontrol1.InsertItem(i, L"item list");
}

我也尝试使用后台线程,但结果相同。 知道如何在不阻塞用户界面的情况下正确执行此操作吗?

2 个答案:

答案 0 :(得分:1)

向消息泵中输入15k消息将会很慢。

最好使用virtual list control进行适当的缓存。有关工作代码,请参阅%Windows SDK目录%\ Samples \ winui \ controls \ common \ vlistvw中的VListVW Sample

答案 1 :(得分:1)

正如盛江所说,虚拟列表是这样一个伟大列表的最佳解决方案。但是你可以在插入过程中提高性能,避免控制绘画:

listcontrol1.SetRedraw(FALSE);
for (unsigned i = 1; i < 15000; ++i)
{
    listcontrol1.InsertItem(i, L"item list");
}
listcontrol1.SetRedraw(TRUE);