生成屏幕截图的功能会产生异常

时间:2014-07-05 22:12:23

标签: c# winforms

我有一个在计时器上调用的函数。然后使用屏幕截图检查某些像素的颜色。如果相关,我也在使用与Arduino的串行通信。

    private Bitmap Screenshot()
    {
        Bitmap bmpScreenshot;
        bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
                                   Screen.PrimaryScreen.Bounds.Height);
        Graphics g = Graphics.FromImage(bmpScreenshot);
        g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
        return bmpScreenshot;
    }

我遇到的问题是,在运行一段时间后,我收到以下错误:

  

“System.ComponentModel.Win32Exception”类型的未处理异常   发生在System.Drawing.dll

其他信息:重叠的I / O操作正在进行中

我无法在任何地方找到它的来源或如何解决它,任何帮助都会很棒。

感谢。

1 个答案:

答案 0 :(得分:0)

如果您没有正确处理其资源,则Graphics是一个已知具有奇怪行为的类。您需要处理在方法中创建的Graphics对象。

private Bitmap Screenshot()
{
    Bitmap bmpScreenshot;
    bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
                               Screen.PrimaryScreen.Bounds.Height);
    using(Graphics g = Graphics.FromImage(bmpScreenshot))
    {
        g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
        return bmpScreenshot;
    }
}

另外一定要确保在完成调用后也将Bitmap部署在调用函数中。

我不知道这是否可以解决您的问题,但它可能会解决问题。