首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#屏幕检测

C#屏幕检测
EN

Stack Overflow用户
提问于 2016-10-04 16:02:16
回答 1查看 361关注 0票数 1

我有检测屏幕的代码:

代码语言:javascript
复制
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毫秒就叫一次计时器。

代码语言:javascript
复制
private void timer1_Tick(object sender, EventArgs e)
        {
            pictureBox1.Image = CaptureScreen();
        }

15秒后,应用程序崩溃了,因为它占用了很多内存。我怎么才能阻止这一切?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-04 16:10:47

你应该处理你的位图。在timer1_Tick方法中:

代码语言:javascript
复制
var oldImage = pictureBox1.Image as IDisposable;
pictureBox1.Image = CaptureScreen();
if (oldImage != null)
{
    oldImage.Dispose();
}

一些附加信息:.NET 位图类“封装GDI+位图”。调用处置允许重新分配映像所使用的资源。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39856953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档