4

私のフォームには C# の ListView と ImageList があり、最大で約 1000 ファイルのディレクトリを読み込んでいます。AddRange メソッドを使用して、ListView と ImageList に fileItems DummyItems の数を事前に入力し、ListView のちらつきとスクロールを回避します。

2 番目のステップでは、ファイル システムから実際のアイテムを読み取るときに、正しいアイテム情報をダミー アイテムに割り当てたいと思いました。アイテムのテキストは問題ありませんが、ダミーの画像を差し替えることができません。そうしようとすると、常に無効な引数の例外がスローされます。RemoveAtIndex または RemoveAtKey で画像を削除してから再度追加すると、1000 個のファイルを反復処理するのに時間がかかります。ImageList の「RemoveAtKey」で 1000 個のファイルに 8 分かかります。「RemoveAtKey」は私が見つけたボトルネックです。前にすべての画像をクリアして AddRange で再設定しようとすると、アイテムの画像が空白になるか、例外が発生します。私が使用する方法とは別の方法で、1000 個のファイルから 1000 個の異なるサムネイルをファイル名で高速にリストビュー コントロールに取得する方法を誰かが知っていますか?

4

1 に答える 1

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);
        }
    }
}

これにより、アイテムをリスト ビューに高速で追加するときのちらつきの問題が修正されます。

私はまだあなたの他の問題についていくつかの調査とテストを行っています.

于 2013-08-14T15:52:26.453 に答える