Richtiger Weg, um Bild / Bitmap und PictureBox zu entsorgen

Ich versuche, eine Windows Mobile 6-Anwendung (in WF / C #) zu entwickeln. Es gibt nur ein Formular und auf dem Formular befindet sich nur ein PictureBox-Objekt. Darauf zeichne ich alle gewünschten Steuerelemente oder was auch immer ich will.

Es gibt zwei Dinge, die ich tue. Zeichnen von benutzerdefinierten Formen und Laden von Bitmaps aus PNG-Dateien.

Die nächste Zeile sperrt die Datei beim Laden (was ein unerwünschtes Szenario ist):

Bitmap bmp = new Bitmap("file.png");

So benutze ich einen anderen Weg, um eine Bitmap zu laden.

public static Bitmap LoadBitmap(string path) {
    using (Bitmap original = new Bitmap(path))
    {
        return new Bitmap(original);
    }
}

Dies ist wahrscheinlich viel langsamer, aber ich weiß nicht, wie ich ein Bild besser laden kann, während die Dateisperre schnell aufgehoben wird.

Nun, beim Zeichnen eines Bildes gibt es eine Methode, die ich verwende:

public void Draw() {
    Bitmap bmp = new Bitmap(240,320);
    Graphics g = Graphics.FromImage(bmp);

    // draw something with Graphics here.
    g.Clear(Color.Black);
    g.DrawImage(Images.CloseIcon, 16, 48);
    g.DrawImage(Images.RefreshIcon, 46, 48);
    g.FillRectangle(new SolidBrush(Color.Black), 0, 100, 240, 103);

    pictureBox.Image = bmp; 
}

Dies scheint jedoch eine Art Speicherverlust zu sein. Und wenn ich es zu lange mache, stürzt die Anwendung schließlich ab.

Daher habe ich 3 Fragen:

1.) Was ist der bessere Weg, um Bitmaps aus Dateien zu laden, ohne die Datei zu sperren?

2.) Welche Objekte müssen manuell in der Draw () - Funktion abgelegt werden (und in welcher Reihenfolge), damit kein Speicherverlust und keine ObjectDisposedException ausgelöst wird?

3. Wenn pictureBox.Image wie in der letzten Codezeile auf bmp gesetzt ist, würde pictureBox.Image.Dispose () nur Ressourcen zur Verwaltung der pictureBox.Image oder der zugrunde liegenden Bitmap zur Verfügung stellen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage