我是 C# 的新手。我必须在工作线程中反复刷新 GUI 图片框。图像是从使用 GetImage 方法轮询驱动程序的相机获取的,该方法检索要显示的图像。即使我使用指令“使用”分配位图并显式调用 GC,内存似乎也永远不会被释放。
工作线程是这样的:
while (true)
{
// request image with IR signal values (array of UInt16)
image = axLVCam.GetImage(0);
lut = axLVCam.GetLUT(1);
DrawPicture(image, lut);
//GC.Collect();
}
虽然 DrawPicture 方法类似于
public void DrawPicture(object image, object lut)
{
[...]
// We have an image - cast it to proper type
System.UInt16[,] im = image as System.UInt16[,];
float[] lutTempConversion = lut as float[];
int lngWidthIrImage = im.GetLength(0);
int lngHeightIrImage = im.GetLength(1);
using (Bitmap bmp = new Bitmap(lngWidthIrImage, lngHeightIrImage)) {
[...many operation on bitmap pixel...]
// Bitmap is ready - update image control
//SetControlPropertyThreadSafe(tempTxtBox, "Text", string.Format("{0:0.#}", lutTempConversion[im[160, 100]]));
//tempTxtBox.Text = string.Format("{0:00000}", im[160, 100]);
//System.Drawing.Image.FromHbitmap(bmp.GetHbitmap());
pic.Image = System.Drawing.Image.FromHbitmap(bmp.GetHbitmap());
}
}
问题出现了
pic.Image = System.Drawing.Image.FromHbitmap(bmp.GetHbitmap());
事实上,评论那行代码,垃圾收集就可以正常工作。更好的是,问题似乎出在
System.Drawing.Image.FromHbitmap(bmp.GetHbitmap())
有什么建议可以解决这个内存泄漏?
非常感谢!