代码之家  ›  专栏  ›  技术社区  ›  James King

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

  •  1
  • James King  · 技术社区  · 15 年前

    我需要从数据库中检索一组数据,然后用数据填充ListView。我了解多线程表单控件以及从工作线程更新控件的适当技术。问题是:

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

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

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

    我可以使用重载的addrange(listviewitem[]),但是数组在今天和现在都相当笨拙。

    有人建议如何从工作线程向ListView添加几千个项吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Michael Donohue Reno    15 年前

    我想你已经有了答案-addrange(listviewitem[])。如果您觉得数组令人讨厌,可以使用列表,然后在调用addrange时执行toarray()。