【发布时间】:2015-01-09 23:06:45
【问题描述】:
所以我试图将大量图标填充到列表视图中。为了避免长时间的等待,我试图让它加载前 1000 个结果,然后在用户按下加载更多按钮时加载更多。
这就是我卡住的地方。如果我一次加载所有 10,000 多个图标,我需要 37 秒。但是,如果我决定每次用户单击按钮时再添加 500 个图标,我需要 40 秒,这比一次添加所有图标更糟糕!代码的唯一区别是我必须将这一行设为委托以避免跨线程问题。有没有更快的方法来做到这一点?
for (int i = lastLoadedIndex; i < lastLoadedIndex+500; i++)
{
string file = resultArr[i];
Invoke((MethodInvoker)delegate()
{
this.imageList1.Images.Add(Image.FromFile(file));
});
}
【问题讨论】:
-
不确定它在您的应用程序中是否有意义,但也许您可以使用多个 ImageList?也许一个用于状态者,另一个用于在用户仍在查看第一批时填充其余部分.. Ot 将 1ok 分成 10 个 ImageLists..
-
@JLYK 将
Image.FromFile(file)放在Invoke块之外。将它放在调用块中会使其在 GUI 线程上运行。 -
与 String 与 StringBuilder 的问题相同。使用它的 Items.AddRange() 方法非常重要。因此它不必经常重新分配其内部存储空间。
标签: c# winforms listview imagelist