Kontinuierliche Erstellung von bitmaps führt zu Speicherverlust

Ich habe einen thread, der kontinuierlich erzeugt bitmaps und macht einen screenshot von einem anderen Programm-Fenster. Nun, ich habe eine pictureBox auf meiner form, und das ist, ständig aktualisiert mit den bitmaps generiert. Hier der code, ich habe in dem thread:

        Bitmap bitmap = null;

        while (true)
        {
            if (listBoxIndex != -1)
            {
                Rectangle rect = windowRects[listBoxIndex];
                bitmap = new Bitmap(rect.Width, rect.Height);
                Graphics g = Graphics.FromImage(bitmap);
                IntPtr hdc = g.GetHdc();
                PrintWindow(windows[listBoxIndex], hdc, 0);
                pictureBox1.Image = bitmap;
                g.ReleaseHdc(hdc);
            }
        }

Wie Sie sehen können, führt dies zu einem memory leak, da der kontinuierliche Aufruf von new Bitmap(rect.Width, rect.Höhe). Ich habe versucht, indem "bitmap".Dispose()" zu der Unterseite der while-Schleife, aber das führt zu der pictureBox das Bild auch entsorgt werden, wodurch eine riesige rote X anstelle des eigentlichen Bildes. Gibt es eine Möglichkeit, ich kann das entsorgen von "bitmap" ohne Entsorgung des pictureBox-Bild?

InformationsquelleAutor user1440308 | 2012-06-06
Schreibe einen Kommentar