我的应用程序运行正常约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次之后不会再发生异常)。这当然不是一个很好的解决方案,有时候它会永远停留在该异常范围内,在我重新启动应用程序之前根本不会截取屏幕截图。
我不知道为什么参数无效以及可能导致这种情况的原因。有什么想法吗?
答案 0 :(得分:1)
我可以肯定地为您提供的是一个具体的替代方案,它将生成相同的输出,而不是使用CopyFromScreen
使用platform invoke
直接与Windows API互操作。你可以在这里找到一个完整的例子,简单地Hans Passant来回答一个问题here。