Listview在c#中慢速刷新

时间:2011-09-07 01:25:12

标签: c# winforms listview refresh

我有一个ArrayList,它经常更改。

ListView显示ArrayList的数据,因此当ArrayList发生更改时,必须快速更改此ListView。

所以我写了这样的代码:

ArrayList ar;
ListView lv;

paintmethod()
{
  lv.items.clear();
  lv.addlistview(ar);
  lv.invalidate();
}

private void addlistview(ArrayList arr)
{
  lv.Items.Add(arr.somedata.tostring(),arr.somedata.tostring());
}

此代码有效,但当ArrayList更改时,ListView不会立即刷新。

它刷新了20秒,30秒甚至1分钟。

如何解决此问题呢?

3 个答案:

答案 0 :(得分:2)

尝试以下内容并查看更好。在更新多个listView项时,最好使用BeginUpdate()EndUpdate()。因为在调用EndUpdate方法之前,BeginUpdate()会阻止控件的绘制。

paintmethod()
{
    lv.BeginUpdate();

    lv.items.clear();
    lv.addlistview(ar);

    lv.EndUpdate();
}
  

向ListView添加多个项目的首选方法是使用   ListView.ListViewItemCollection的AddRange方法(已访问   通过ListView的Items属性)。这使您可以添加   单个操作中列表中的项目数组。

MSDN

这应该可以大大提高性能。

答案 1 :(得分:1)

是否有理由将listview.ItemsSource绑定到observablecollection?然后,您只需要对可观察集合进行处理,这将逐步通知列表视图。

答案 2 :(得分:0)

this.SuspendLayout();
lv.items.clear();
lv.addlistview(ar);
lv.invalidate();
this.ResumeLayout(false);