ビットマップを継続的に生成し、別のプログラムのウィンドウのスクリーンショットを撮るスレッドがあります。現在、フォームに 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 イメージを破棄せずに「ビットマップ」を破棄する方法はありますか?