在获取屏幕截图一段时间后随机System.ArgumentException

时间:2013-01-10 16:44:00

标签: c# exception argumentexception

我的应用程序运行正常约5分钟,然后它会抛出一些随机System.ArgumentException,如下面的屏幕截图所示: 这里的一个大问题是两个论点实际上看起来都是正确的,并且它在大约5分钟内完美地运行。 我的应用程序只是在一个单独的线程中继续拍摄屏幕快照。

以下代码获取屏幕快照,此代码段中显示System.ArgumentException(与屏幕截图相同)。

Bitmap SNew = new Bitmap(NewRes.Width, NewRes.Height);
using (Graphics g = Graphics.FromImage(SNew))
    g.CopyFromScreen(0, 0, 0, 0, new Size(NewRes.Width, NewRes.Height));

同样的异常也可能发生在CopyFromScreen方法中,具有相同的看似正确的NewRes值(而不是在我的代码段的第一行出现):

An unhandled exception of type 'System.ArgumentException' occurred in System.Drawing.dll


如果我将此代码放在try { } catch { }子句中,它也可以正常(在日志中弹出异常大约10次之后不会再发生异常)。这当然不是一个很好的解决方案,有时候它会永远停留在该异常范围内,在我重新启动应用程序之前根本不会截取屏幕截图。

我不知道为什么参数无效以及可能导致这种情况的原因。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我可以肯定地为您提供的是一个具体的替代方案,它将生成相同的输出,而不是使用CopyFromScreen使用platform invoke直接与Windows API互操作。你可以在这里找到一个完整的例子,简单地Hans Passant来回答一个问题here

但是,我不能确切地告诉你为什么你会遇到异常,但是我可以从其他来源推断出来,例如this thread(顺便说一下Hans再次将其作为nobugz)以及我自己的经历{{{ 1}}是错误的,在这种情况下,可能会遭受内存泄漏。考虑到我链接的线程,您的目标框架是什么版本的.NET Framework?