ファイルのリストで初期化された ListView (in) にアイコンをロードする最良の方法を見つけるのに苦労していView.LargeIcon
ます。
ImageList を使用する必要があると考えたので、ImageList を作成して ListView に割り当てました。各画像からアイコンをロードする面倒な作業を処理する BackgroundWorker を作成しました。
と
DoWork
の組み合わせを使用して、ListView に項目を追加しました。これはうまくいきましたが、UI が少しちらつき、あまりよく見えませんでした。ワーカー スレッド内からループできないということは、aを引数として渡す必要があることを意味していました。ループ内で呼び出してチェックし、それが true の場合は終了していたにもかかわらず、BackgroundWorker をキャンセルするのに問題がありました。(なぜこれが起こったのかは、現時点では重要ではありません。)InvokeRequired
Invoke
ListView.Items
List<ListViewItem>
CancelAsync
CancellationPending
ProgressChanged
イベントを使用してすべての UI 作業を処理しようとしました。UI スレッドが UI を更新するために使用する情報 (つまり、ListView) のフィールドを含むカスタム クラスのReportProgress(0, obj)
場所を呼び出しました。obj
このアプローチはより有望に思えました。
ただし、どちらのソリューションも私には特に洗練されているとは感じず、どちらも特に優れたユーザー エクスペリエンスにはなりません。この問題に対する(明白な)解決策が欠けているように感じます。結局のところ、Windows エクスプローラーは、私のアプリケーションよりも画像のサムネイルの読み込みをはるかにうまく処理します。ただし、Windows Explorer はサムネイルを Thumbs.db にキャッシュしていると思います。
おそらく、上記の 2 つのアプローチのいずれかが正しい方法です。その場合は教えてください。その特定のソリューションをより詳細に調査して、何が間違っているのかを突き止めます。
編集
ファイルとアイコンのリストがネットワーク パスから読み込まれていることを忘れていました。