Ich habe eine Listenansicht, die alle Elemente aus einem Verzeichnis listet etwa so:Listview zeigt falsche Bilder für jedes Element
Aber wie Sie in diesem Bild sehen:
Sie sind nicht in Ordnung, weil ein Bildtext komplett übersprungen wurde, aber das Bild selbst ist noch in Ordnung.
Aber, wenn es weiter unten in der Liste bekommt, etwa auf halbem Weg beginnen starten sie in diesem Beispiel vollständig vermischt wie immer:
Wenn ein Bild klicken sie die Vorschau der korrekten zeigen Bild auf der rechten Seite.
Dies ist der Code, den ich in allen Bildern laden bin mit:
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
Bevor ich in der Background hatte enorme Ladezeiten für eine große Menge von Bildern hinzugefügt, so Ich dachte, ich würde den Hintergrundarbeiter implementieren, um asynchrone Arbeit zu ermöglichen. Allerdings läuft etwas völlig falsch am Anfang der Aufgabe und mehrfach durch die Liste, wo es völlig vermasselt, wie in Bild 3 gezeigt.
Hat jemand eine Ahnung, was schief läuft, oder irgendeine Alternative Lösungen für das, was ich erreichen möchte?
Das funktioniert wie ein Charme! Vielen Dank für diese detaillierte Antwort, und um mir zu helfen, einige dumme Fehler zu klären ... Ich habe eine letzte Frage: Wenn ich die Liste aktualisieren/neu laden wollte, musste ich nur die Liste löschen und dann die wieder Hintergrundarbeiter? –
Auch ich aus Neugier tauschte diese zwei Linien um: 'imgList.Images.Add (img.Image) ListView1.Items.Add (img.FileName, imgList.Images.Count - 1) ' Und es war der gleiche Fehler wie am Anfang, also war das vielleicht das ganze Problem? –
@DominikH: Ja, Sie können nur die 'ListView' und die' imgList' löschen und dann können Sie die BGW erneut ausführen. –