VB Problem mit Dispose()
lima-city → Forum → Programmiersprachen → Basic
bild
code
datei
einwandfrei danke
image
interessieren
jemand
lade
laufen
momentan zwei
neustart
pfad
problem
programm
ratio
release
ressource
single
string
tun
-
Ich lade über "ldPic" ein Bild in die PictureBox1, welches zuerst noch auf die Breite der PictureBox eingepasst wird, "path" enthält dabei den Pfad zur Datei:
Shared Sub ldPic(ByVal path As String) Dim ratio As Single = Image.FromFile(path).Width / Image.FromFile(path).Height Dim width As Integer = MainForm.PictureBox1.Width Dim heigth As Integer = Math.Round(MainForm.PictureBox1.Width / ratio) Dim OutputBitmap As New Bitmap(System.Drawing.Image.FromFile(path), width, heigth) MainForm.PictureBox1.Image = OutputBitmap MainForm.PictureBox1.Refresh() End Sub
Das funktioniert soweit auch. Nun möchte ich das Bild aber auch über das Programm löschen können. Dazu verwende ich das Sub "clrPic":
Shared Sub clrpic(ByVal path As String) MainForm.PictureBox1.Image.Dispose() My.Computer.FileSystem.DeleteFile(path) End Sub
Dabei erhalte ich allerdings die Fehlermeldung, dass die Datei noch vom Programm verwendet wird, obwohl ich mit Dispose() das Bild aus dem Speicher gelöscht habe.
Wenn ich nun das Bild direkt in die PictureBox lade (ohne die Größe zu verändern), funktioniert es einwandfrei:
Shared Sub ldPic(ByVal path As String) MainForm.PictureBox1.Image = Image.FromFile(path) MainForm.PictureBox1.Refresh() End Sub
Was übersehe ich da? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
das Problem hatte ich einige Male. Knifflig. Nicht nur mit Bilddateien. Leider kann ich mich nicht mehr entsinnen, wie ich das Problem gelöst hatte. Es liegt aber nicht an einer PictureBox, sondern vermutlich an der Bitmap.
Bei den Bilddateien habe ich es umgangen: Bilder als Ressourcen eingebunden, und so dann nacheinander angesprochen. Ist aber keine befriedigende Lösung. Man kann ja nur die Bilder, die man als Ressource eingebunden hat, nutzen; und das ist doof.
Wenn jemand eine vernünftige Lösung, dann würde mich diese auch interessieren.
Achso, was mir aber noch gerade einfällt: Wenn man das Programm per Debugger laufen lässt und es dann auch per Debugger killt, dann ist das Programm nicht ordnungsgemäß beendet worden. Gerade solche Dinge, die mit dem Betriebssystem zu tun haben, werden irgendwie vernachlässigt. Dazu kenne ich momentan zwei Beispiele zu: einmal das was dir auch gerade passiert ist. Das andere ist, dass ein TrayIcon immer noch in der Infoleiste angezeigt wird, wenn man eines dort platziert hat. Mit der Release-Version des Programms klappt das mit dem TrayIcon aber wunderbar. -
Achso, was mir aber noch gerade einfällt: Wenn man das Programm per Debugger laufen lässt und es dann auch per Debugger killt, dann ist das Programm nicht ordnungsgemäß beendet worden.
Das war wirklich das Problem. Nach einem Neustart funktionierte es einwandfrei.
Danke für die Hilfe, hätte mir nicht gedacht, dass dort das Problem liegt. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage