Hallo zusammen,
habe leider noch ein kleines Problem.
Wie in meinem anderen Thread bereits erwähnt schreibe ich ein Programm zum Umwandeln von Bildern.
Wenn es viele Bilder sind, friert die GUI ein und es sieht aus wie abgestürzt.
Gut also der Backgroundworker muss her.
Ich bin kein Programmierer und habe mir alles durch lesen, try and error selber beigebracht bitte habt Nachsicht mit mir
Also ich habe eine For Schleife für das Abarbeiten der Bilder aus einer Listbox.
Wenn ich jetzt diese For Schleife in einen BGW einbaue, dann kann er nicht mehr auf das Listview Object zugreifen.
Das ist die For Schleife.
Dann habe ich mir die Finger wund gesucht und versuchte es dann mit Invoke.
Habe diese For Schleife in eine Sub gepackt und rufe nun diese Sub auf
Das funktioniert auch wunderbar.
Leider wird die ProgressChanged Methode erst aufgerufen, wenn du komplette Sub fertig ist (alle Bilder abgearbeitet).
Möchte aber ja, dass jeder Schleifendurchlauf reported wird.
In der ProgressChanged Methode ist eine Progressbar.
Was kann ich tun?
oder
Wie bekomme ich es hin, dass der BGW ohne invoke auf die Listview zugreifen kann?
Vielen Dank schon mal im Voraus.
PS. Das i von zählt auch hoch, wie es sein soll.
LG
habe leider noch ein kleines Problem.
Wie in meinem anderen Thread bereits erwähnt schreibe ich ein Programm zum Umwandeln von Bildern.
Wenn es viele Bilder sind, friert die GUI ein und es sieht aus wie abgestürzt.
Gut also der Backgroundworker muss her.
Ich bin kein Programmierer und habe mir alles durch lesen, try and error selber beigebracht bitte habt Nachsicht mit mir
Also ich habe eine For Schleife für das Abarbeiten der Bilder aus einer Listbox.
Wenn ich jetzt diese For Schleife in einen BGW einbaue, dann kann er nicht mehr auf das Listview Object zugreifen.
VB.NET-Quellcode
- For i = 0 To ListView1.SelectedItems.Count - 1
- ordner_tpl = MetroLabel7.Text.Replace("aktiver TPL Ordner: ", "")
- Try
- If (ListView1.Items.Count = 0) Then Return 'ListView leer
- If (ListView1.SelectedItems.Count = 0) Then Return 'Kein Eintrag markiert
- If (ListView1.SelectedItems(0).SubItems.Count < 2) Then Return 'Keine oder zu wenige SubItems
- If manueller_Ordner_tpl = True Then
- Try
- PictureBox1.Image = Base64ToImage(System.IO.File.ReadAllText(ordner_tpl & "\" & ListView1.SelectedItems(i).SubItems(1).Text))
- Catch ex As Exception
- PictureBox1.Image = PictureBox1.ErrorImage
- End Try
- Else
- Try
- PictureBox1.Image = Base64ToImage(System.IO.File.ReadAllText(My.Settings.standardordner_tpl & "\" & ListView1.SelectedItems(i).SubItems(1).Text))
- Catch ex As Exception
- PictureBox1.Image = PictureBox1.ErrorImage
- End Try
- End If
- Catch ex As Exception
- MsgBox(ex.Message)
- End Try
- PictureBox1.Image.Save(ordner_für_png & "\" & ListView1.SelectedItems(i).SubItems(1).Text.Replace("tpl", "png"))
- BackgroundWorker1.ReportProgress(i)
- Next
Das ist die For Schleife.
Dann habe ich mir die Finger wund gesucht und versuchte es dann mit Invoke.
Habe diese For Schleife in eine Sub gepackt und rufe nun diese Sub auf
Das funktioniert auch wunderbar.
Leider wird die ProgressChanged Methode erst aufgerufen, wenn du komplette Sub fertig ist (alle Bilder abgearbeitet).
Möchte aber ja, dass jeder Schleifendurchlauf reported wird.
In der ProgressChanged Methode ist eine Progressbar.
Was kann ich tun?
oder
Wie bekomme ich es hin, dass der BGW ohne invoke auf die Listview zugreifen kann?
Vielen Dank schon mal im Voraus.
PS. Das i von zählt auch hoch, wie es sein soll.
LG
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „dj alex z“ ()