La creación continua de mapas de bits conduce a la pérdida de memoria

Tengo un hilo que continuamente genera mapas de bits y toma una captura de pantalla de la ventana de otro programa. Ahora, tengo un cuadro de cuadro en mi formulario, y eso se actualiza constantemente con los mapas de bits generados. Aquí está el código que tengo en el hilo:

        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);
            }
        }

Como puede ver, esto conduce a una pérdida de memoria, debido a la llamada continua al nuevo mapa de bits (rect.Width, rect.Height). He intentado agregar "bitmap.Dispose ()" en la parte inferior del bucle while, pero eso hace que también se elimine la imagen de pictureBox, lo que hace que aparezca una X roja gigante en lugar de la imagen real. ¿Hay alguna manera de deshacerme del "mapa de bits" sin eliminar la imagen de pictureBox?

Respuestas a la pregunta(2)

Su respuesta a la pregunta