我有一个线程可以连续生成位图并获取另一个程序窗口的屏幕截图。现在,我的表单上有一个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);
}
}
正如你所看到的,这会导致内存泄漏,因为连续呼叫转接至新位图(rect.Width,rect.Height)的。我已经尝试在while循环的底部添加“bitmap.Dispose()”,但导致pictureBox的图像也被丢弃,这使得巨大的红色X代替实际的图像。有没有办法处理“位图”而不处理pictureBox图像?
哦,这是正确的。 using关键字如何漏掉我的脑海?我修改了我的代码。谢谢! – user1440308
'使用'位图会在将它分配到您的'PictureBox'之后处理它,这就是导致位图首先变得无法访问的原因。您需要保持位图在“PictureBox”上显示的持续时间。 – Lucero
@ xmenW.K。究竟是不是真的? 'Image.Dispose()'释放本地图像指针,你可以自己检查源。 – Lucero