2012-06-24 21 views
4

我在我的表單中的C#中有一個ListView和ImageList,並讀取最大約1000個文件的目錄。 我用AddRange方法預先填充ListItem和ImageList與fileItems DummyItems的計數,以避免閃爍和滾動ListView。C#listview imagelist快速添加很多項目

現在在第二步中,我只是想將正確的項目信息分配給虛擬項目,而我從文件系統中讀取真實項目。 項目文字是sofar沒有問題,但我不能替換虛擬圖像。如果我嘗試這樣做,它總是拋出一個無效的參數異常。使用RemoveAtIndex或RemoveAtKey刪除圖像,然後重新添加會花費我很長時間來遍歷1000個文件。使用ImageList中的「RemoveAtKey」,1000個文件需要8分鐘。 「RemoveAtKey」是我發現的瓶頸。 如果我嘗試清除所有圖像並再次使用AddRange重新填充,則我的項目圖像變爲空白或發生異常。 有人知道我如何從1000個文件中用文件名快速地將1000個不同的縮略圖導入到使用另一種方法的列表視圖控件中嗎?

+0

你能發佈你的代碼嗎? – Yushell

回答

0

首先你可能想創建一個名爲「ListViewNF」一個新的用戶控件,用下面的代碼:

class ListViewNF : System.Windows.Forms.ListView 
{ 
    public ListViewNF() 
    { 
     //Activate double buffering 
     this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); 

     //Enable the OnNotifyMessage event so we get a chance to filter out 
     // Windows messages before they get to the form's WndProc 
     this.SetStyle(ControlStyles.EnableNotifyMessage, true); 
    } 

    protected override void OnNotifyMessage(Message m) 
    { 
     //Filter out the WM_ERASEBKGND message 
     if(m.Msg != 0x14) 
     { 
      base.OnNotifyMessage(m); 
     } 
    } 
} 

將項目添加到高速的列表視圖時,該修正閃爍的問題。

我還在爲你的其他問題做一些研究和測試。