Habe bereits gegooglet und die Suchfunktion benutzt, aber keine Lösung gefunden.
Habe ein Panel wo ich ein Bild anzeige. Bloß egal wie, ich bekomme die Ressource nicht mehr frei.
"this.BackgroundImage" => Image Variable
using (Bitmap bmp = new Bitmap(this.lstPfadeFotos[this.CurrentPicture - 1]).Zoom(this.panPicture.Size))
this.BackgroundImage = new Bitmap(bmp);
this.panPicture.BackgroundImage = this.BackgroundImage;
this.BackgroundImage.Dispose();
this.BackgroundImage = null;
this.panPicture.BackgroundImage.Dispose();
this.panPicture.BackgroundImage = null;
bool t = this.CanOpenFile(this.lstPfadeFotos[this.CurrentPicture - 1]);
(this.lstPfadeFotos[this.CurrentPicture - 1]) = Pfad zur Datei.
Bei " this.CanOpenFile" kommt immer False raus, Methode versucht einfach die Datei zu öffnen.
Zoom Erweiterungsfunktion:
public static Bitmap Zoom(this Image img, Size max)
{
double factorHo = (double)max.Width / (double)img.Width;
double factorVe = (double)max.Height / (double)img.Height;
double factor = GetSmaller(factorHo, factorVe);
return new Bitmap(img, new Size((int)(img.Width * factor), (int)(img.Height * factor)));
}
private static double GetSmaller(double n1, double n2)
{
if (n1 < n2)
return n1;
else
return n2;
}
Aber wo blockiert das Programm die Ressource?
Hi,
wenn ich das auf die Schnelle richtig sehe, dann wird von dem Bitmap, das an die Zoom-Erweiterungsmethode übergeben wird, kein Dispose aufgerufen.
Hab die als Erweiterungsmethode entfernt und nur als statische Methode dar gelassen.
Innerhalb einer using Methode aufgerufen und es funktioniert, danke !
Nur mal gerade auf die schnelle drauf geguckt... werd sicherlich gleich korrigiert wenn's nicht stimt 😉
Ich glaube du rufst das Dispose nicht auf dem richtigen Bitmap.
using (Bitmap bmp = new Bitmap(this.lstPfadeFotos[this.CurrentPicture - 1]).Zoom(this.panPicture.Size))
this.BackgroundImage = new Bitmap(bmp);
Das Dispose nach dem Using wird auf dem Bitmap angewendet, dass aus der Zoom-Funktion zurückgegeben wird.
Nicht auf dem Bitmap das mit ...
new Bitmap(this.lstPfadeFotos[this.CurrentPicture - 1])
... erzeugt wird.
Daher bleibt der Handle bestehen.
Nachtrag:
Ich sollte mal den Thread ganz lesen. Wurde ja schon beantwortet. Sorry 😉
http://dotnet-paderborn.azurewebsites.net/
Deine Erklärung liefert auf jeden Fall detailliertere Infos für die Nachwelt als mein kurzer Satz. =)