kostenloser Webspace werbefrei: lima-city


VB Problem mit Dispose()

lima-cityForumProgrammiersprachenBasic

  1. Autor dieses Themas

    h******g

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. Autor dieses Themas

    h******g

    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.
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!