在多线程应用程序中填充ListView

时间:2009-10-11 03:54:09

标签: multithreading listview listviewitem

我需要从数据库中检索一组数据,然后用数据填充ListView。我理解多线程表单控件和从工作线程更新控件的正确技术。这就是困境:

我可能在ListView中有几千个条目...而不是调用表单线程一次更新一个,我想构建一个ListViewItem对象的集合并使用ListView.Items.AddRange(ListViewItemCollection)

但是,MSDN文档建议不要创建自己的ListViewItemCollection(实际上,尝试创建自己的ListViewItemCollection会生成空引用错误,因为没有父集)。相反,MS建议您只通过ListView.Items属性获取ListViewItemCollection。

当然,这是循环推理,无法在不产生错误的情况下从工作线程完成:“跨线程操作无效:控制'ListView'从其创建的线程以外的线程访问。“

我可以使用重载的AddRange(ListViewItem []),但在这个时代,数组相当笨拙。

任何人都有建议如何从工作线程向ListView添加数千个项目?

1 个答案:

答案 0 :(得分:2)

我想你已经有了答案 - AddRange(ListViewItem [])。如果您发现数组令人反感,您可以使用List,然后在调用AddRange时执行toArray()。