0

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

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

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

4

2 回答 2

1

将 15k 条消息倒入消息泵中会很慢。

更好地使用具有适当缓存的虚拟列表控件。有关工作代码,请参阅 %Windows SDK Dir%\Samples\winui\controls\common\vlistvw 中的VListVW示例。

于 2014-10-09T20:44:56.410 回答
1

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

listcontrol1.SetRedraw(FALSE);
for (unsigned i = 1; i < 15000; ++i)
{
    listcontrol1.InsertItem(i, L"item list");
}
listcontrol1.SetRedraw(TRUE);
于 2014-10-14T14:27:56.340 回答