У меня есть поток, который постоянно генерирует растровые изображения и делает скриншот окна другой программы. Теперь у меня есть 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?