Frage von Taner1998444, 117

Ich möchte in Visual Basic in eine Picturebox mehrere Bilder nacheinander laden, jedoch wird das Bild irgendwann nicht mehr angezeigt. Was kann man da machen?

Hallo,

wie aus der Frage zu entnehmen möchte ich in Visual Basic mehrere 100 Bilder, nacheinander in einer Picturebox öffnen. Jedoch kommt es hin und wieder vor, dass ein Bild obwohl es existiert nicht geladen wird. Meine Frage ist wo das Problem liegt und wie man es beheben kann. Vielen dank schonmal für alle Antworten!

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von CrystalixXx, 78

Ich kann dir zumindest so viel sagen, dass es nicht an der Programmiersprache liegt. Wie bereits erwähnt wird eine Lösung schwierig, wenn man deinen Code nicht sieht. Noch schwieriger, wenn du glaubst, dass sowieso alles richtig ist.

Ich vermute, dass du ein Speicherproblem hast und ggf. die Bilder disposen solltest. Das muss aber auch nicht sinnvoll sein, je nach dem, wo die Bilder denn herkommen.

Kommentar von Taner1998444 ,

Die Bilder sind auf dem Desktop gespeichert. Ich glaube auch nicht, dass ich beim Programmieren keine Fehler gemacht habe aber ich habe das ganze im kleinerem Rahmen ausprobiert und da hat alles gut funktioniert. Kannst du mir vielleciht genau sagen wie ich das Speicherproblem angehen kann?

Das hat mir schon gut weitergeholfen!

Vielen dank dafür :)

Kommentar von CrystalixXx ,

Wie lädst du denn die Bilder? Es gibt da viele Möglichkeiten und einige davon können bei Unachtsamkeit zu solchen Speicherproblemen führen. Nachfolgend zwei Beispiele mit diesen Deklarationen:

 ' Enthält alle Pfade zu den Bilddateien
Private wallpaperList As New List(Of String)
' Index des aktuell gezeigten Bildes
Private wallpaperIndex As Integer

Beispiel mit Speicherproblem:

PictureBox1.Image = Image.FromFile(wallpaperList(wallpaperIndex))

Beispiel ohne Speicherproblem:

Using fs As New IO.FileStream(wallpaperList(wallpaperIndex), IO.FileMode.Open)
PictureBox1.Image = Image.FromStream(fs)
End Using

Im ersten Beispiel wird zwar das Bild aus der Datei geladen, allerdings bleibt das Handle der Datei geöffnet. Es werden also Resourcen beansprucht, die anschließend nicht wieder freigegeben werden. Das wird umso kritischer, wenn du ein anderes Bild auf die selbe Weise der Image-Eigenschaft zuweist, weil du dann keine Chance mehr hast die Resourcen vom vorherigen Bild mittels Dispose freizugeben. Abhilfe würde also folgende Codezeile vor der Zuweisung eines neuen Bildes schaffen:

If PictureBox1.Image IsNot Nothing Then PictureBox1.Image.Dispose()

Meiner Meinung nach ist das aber zu umständlich und vor allem zu anfällig, wenn man nicht daran denkt. Daher ist das zweite Beispiel übersichtlicher und besser, weil die Using-Direktive eine solche Freigabe mit dem End Using Statement automatisch ausführt.

Ich weiß aber nicht, ob das zur Lösung deines eigentlichen Problemes beiträgt. Ich konnte ein solches Verhalten mit etwa 115 Bildern und einem Interval von 200 ms nicht reproduzieren.

Antwort
von xGlumi, 74

Ich kann dir jetzt schonmal sagen, dass deine Frage/Problemstellung keinem einen Einblick in deinen Code verschafft...

Und dir somit niemand helfen kann.

Bitte erklär es mal genauer, und am besten auch mit deinem Code.

Denn z.b weiss man garnicht in welchem Zeitrum er diese 100 Bilder durchlaufen soll, oder ob es einen externen Trigger (z.b einen Button) als Bildwechsel benötigt etc. etc. etc. blablabla

Einfach hier mit ner besseren Fragestellung drauf antworten :)

MFG xGlumi

Kommentar von Taner1998444 ,

Es ist ca 1 Bild pro Sekunde das vom Programm geöffnet wird. (Den Code kann ich hier leider nich posten, da er schon mehrere tausend zeilen lang ist)

Kommentar von xGlumi ,

......

Dann wird dir keiner helfen können...

MFG xGlumi

Kommentar von Taner1998444 ,

Was mich eigentlich interessiert: Hab ich einen Fehler im Code oder kann das an der Programmiersprache liegen?

Kommentar von xGlumi ,

"Hab ich einen Fehler im Code"
OHNE CODE.....

Bitte verstehe -> Ohne Code = Keine Aussage, ob dieser Falsch ist...
Soll man hellsehen?

MFG xGlumi

Kommentar von Taner1998444 ,

Nein, man soll nur sagen ob es theoretisch an VB liegen kann, da ich den Code überprüft habe und relative sicher weiß, dass kein Fehler vorhanden ist. :D

Antwort
von ysz0507, 36

Ich kenne deinen Code nicht aber probiere mal nachdem du dass Bild eingefügt hast
Picturebox1.inva
Dann wird was vorgeschlagen dass musst du nehmen (keine Ahnung wie dass heist)

Ansonsten einfach ein bitmap verwenden

Keine passende Antwort gefunden?

Fragen Sie die Community