对于我的程序,我需要一种每隔半分钟截屏一次的方法。我用Google搜索并提出了这种方法:
public static Bitmap CaptureScreen()
{
Bitmap BMP = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
Graphics GFX = Graphics.FromImage(BMP);
GFX.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Seen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
return BMP;
}
对于方法的前200次使用,一切正常。然后该函数在CopyFromScreen
崩溃并且它说它导致了无效的参数异常。我有点困惑,为什么这是因为参数不会改变。
可能是函数本身只有一个错误吗?如果是这样,有截屏的替代方案吗?
答案 0 :(得分:1)
可能有两个单独的失败处置。 Graphics
和Image
/ Bitmap
都实现了IDisposable
,因此两者中的“显而易见”就在这里:
using(Graphics GFX = Graphics.FromImage(BMP)) {
GFX.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,Seen.PrimaryScreen.Bounds.Y,
0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
}
return BMP;
但是:你的方法的调用者应 using
CaptureScreen
的结果(释放位图的GDI +句柄),即
using(var screen = CaptureScreen()) {
// some work here
}