2011-09-07 69 views
1

我有一個ArrayList,它經常更改。Listview緩慢刷新c#

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分鐘後。

我該怎麼做才能解決這個問題?

回答

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

是否有理由不把你的listview.ItemsSource綁定到observablecollection?然後,你只需要對可觀察的集合進行處理,並且會以增量方式通知列表視圖。

1

請嘗試下面,看看有什麼更好的。更新多個listView項目時,最好使用BeginUpdate()EndUpdate()。由於BeginUpdate()阻止控件繪製,直到調用EndUpdate方法。

paintmethod() 
{ 
    lv.BeginUpdate(); 

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

    lv.EndUpdate(); 
} 

到多個項目添加到ListView的首選方法是使用ListView.ListViewItemCollection(通過ListView中的相關文件屬性訪問 )的 的AddRange方法。這使您可以在單個操作中將 項目數組添加到列表中。

MSDN

這應該加速性能提升不少。