C#屏幕检测

时间:2016-10-04 16:02:17

标签: c# bitmap

我有屏幕检测代码:

private Image CaptureScreen()
        {
            Rectangle screenSize = Screen.PrimaryScreen.Bounds;
            Bitmap target = new Bitmap(screenSize.Width, screenSize.Height);
            using (Graphics g = Graphics.FromImage(target))
            {
                g.CopyFromScreen(0, 0, 0, 0, new Size(screenSize.Width, screenSize.Height));
            }
            return target;
        }

我每隔2毫秒用Timer调用它

private void timer1_Tick(object sender, EventArgs e)
        {
            pictureBox1.Image = CaptureScreen();
        }

15秒后应用程序崩溃,因为使用了很多内存。我怎么能阻止这个?

1 个答案:

答案 0 :(得分:4)

你应该丢弃你的位图。在timer1_Tick方法中:

var oldImage = pictureBox1.Image as IDisposable;
pictureBox1.Image = CaptureScreen();
if (oldImage != null)
{
    oldImage.Dispose();
}

其他一些信息: .NET Bitmap类“封装GDI +位图”。调用Dispose可以重新分配图像使用的资源。

  

在释放对图像的最后一个引用之前,请始终调用Dispose。否则,在垃圾收集器调用Image对象的Finalize方法之前,不会释放它正在使用的资源。