C#位图活动形式>对象引用未设置为对象的实例

时间:2019-05-09 17:42:36

标签: c# bitmap

几天以来,我一直在努力解决活动表单的屏幕截图功能中的错误...

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,则错误得到解决,并且我的表单再次位于所有其他应用程序的前面,然后几个小时后我又遇到了问题...

是否有一些技巧可以解决/或者表格不能全部出现?

1 个答案:

答案 0 :(得分:1)

这是因为在某些时候,您的应用程序不再具有活动表单,并且Form3.ActiveForm属性返回null而不是Form对象。参见the documentation

我建议您不要使用.ActiveForm,而要做其他事情来确定当前表单(我怀疑它必须处于活动状态)-如果此代码是您表单后面的代码的一部分,那么即使是{{1} }将起作用

this

如果代码不在您的表单代码后面,则可以将表单的实例传递给正在创建屏幕快照的任何帮助程序类

using (var bmp = new Bitmap(this.Width, this.Height))