Непрерывное создание растровых изображений приводит к утечке памяти

У меня есть поток, который постоянно генерирует растровые изображения и делает скриншот окна другой программы. Теперь у меня есть pictureBox в моей форме, и он постоянно обновляется сгенерированными растровыми изображениями. Вот код, который у меня есть в треде:

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

Как видите, это приводит к утечке памяти из-за непрерывного вызова new Bitmap(rect.Width, rect.Height). Я попытался добавить «bitmap.Dispose()» в конец цикла while, но это приводит к тому, что изображение pictureBox также удаляется, что делает гигантский красный X вместо фактического изображения. Есть ли способ избавиться от «растрового изображения», не избавляясь от изображения pictureBox?

7
задан tshepang 27 February 2014 в 19:28
поделиться