のための間違った画像を表示I持っているので、同様にディレクトリからすべての項目を一覧表示し、リストビュー:リストビューは、各項目
:しかし、あなたはこの画像で見ることができるように
1つのイメージテキストが完全にスキップされているため、イメージ自体はまだ順番になっています。それは半分程度から始め、リストのさらに下取得
しかし、彼らは完全にこの例のよう混ぜになって起動します。画像をクリックすると、それが正しいのプレビューを示し
右側の画像。
これは、私はすべての画像をロードするために使用しているコードです:私は、BackgroundWorkerのに追加
Dim imgList As New ImageList
Dim imgSize As New Size
Dim count As Integer = 0
Dim imgFilename As String
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
'Dim imlTemp As New ImageList
Dim dirFiles() As String = IO.Directory.GetFiles(My.Settings.GalleryLocation)
'Dim item As New ListViewItem
For Each dirFile As String In dirFiles
imgFileName = IO.Path.GetFileName(dirFile)
Dim img As New System.Drawing.Bitmap(dirFile)
Dim imgImage As Image = Image.FromFile(dirFile)
'Dim imgHeight As Integer
'imgHeight = imgImage.Height
imgSize.Width = 120
imgSize.Height = 174
Threading.Thread.Sleep(10)
BackgroundWorker1.ReportProgress(100/((dirFiles.Count + 1) - count), img)
Next
End Sub
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
ListView1.SmallImageList = imgList
ListView1.LargeImageList = imgList
imgList.ImageSize = imgSize
imgList.ColorDepth = ColorDepth.Depth32Bit
ListView1.Items.Add(imgFilename, count)
imgList.Images.Add(e.UserState.Clone)
count += 1
'ListView1.EnsureVisible(ListView1.Items.Count - 1)
End Sub
前にそれはそう、大量の画像のための驚異的な読み込み時間を持っていました私は、非同期作業を可能にするために背景作業者を実装すると思った。しかし、タスクの開始時に何かが完全に間違っていて、リストを何度か途切れてしまうと、画像3に示すように完全にうんざりしてしまいます。
何が起こっているのか、私がしようとしていることに対する解決策?
これは魅力的です!この詳細な回答をありがとうと私はいくつかの愚かな間違いをクリアするのを手伝ってくれました... 私は最後の質問が1つあります:私はリストを更新/リロードしたいのですが、私はリストをクリアしてからバックグラウンドワーカー? –
また、好奇心から、私は周りにこれらの2行を入れ替え: 'imgList.Images.Add(img.Image) ListView1.Items.Add(img.FileName、imgList.Images.Count - 1) ' そして、非常に最初と同じエラーを出していたので、これが問題だったのでしょうか? –
@DominikH:はい、 'ListView'と' imgList'をクリアするだけでBGWを再実行できます。 –