我有一个线程不断生成位图并截取另一个程序窗口的屏幕截图。现在,我的表单上有一个图片框,它会随着生成的位图不断更新。这是我在线程中的代码:
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 代替了实际图像。有什么方法可以在不处理图片框图像的情况下处理“位图”?