几天以来,我一直在努力解决活动表单的屏幕截图功能中的错误...
Object reference not set to an instance to an object
我的问题:运行我的exe几个小时后,出现错误(重新启动,它可以正常工作而没有错误)
函数的作用:打开表单,初始化新图表,填充,对表单进行屏幕截图并保存屏幕截图...
代码>
var frm = Form3.ActiveForm;
await Task.Delay(2000);
using (var bmp = new Bitmap(frm.Width, frm.Height))
{
frm.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save("TestX.png");
}
其他代码,但无法解决错误
WindowState = FormWindowState.Maximized;
FormBorderStyle = FormBorderStyle.None;
Bounds = Screen.PrimaryScreen.Bounds;
BringToFront();
错误在这里> ... (frm.Width,frm.Height),因为表单不在我所有其他应用程序的前面,并且我认为没有宽度/高度。 。如果我随后重新启动exe,则错误得到解决,并且我的表单再次位于所有其他应用程序的前面,然后几个小时后我又遇到了问题...
是否有一些技巧可以解决/或者表格不能全部出现?
答案 0 :(得分:1)
这是因为在某些时候,您的应用程序不再具有活动表单,并且Form3.ActiveForm
属性返回null
而不是Form对象。参见the documentation
我建议您不要使用.ActiveForm
,而要做其他事情来确定当前表单(我怀疑它必须处于活动状态)-如果此代码是您表单后面的代码的一部分,那么即使是{{1} }将起作用
this
如果代码不在您的表单代码后面,则可以将表单的实例传递给正在创建屏幕快照的任何帮助程序类
using (var bmp = new Bitmap(this.Width, this.Height))