C# 特定秒数后出现空引用异常

C# 特定秒数后出现空引用异常,c#,C#,我得到一个空引用异常,在我用注释表示的行上。有人知道为什么会这样吗 var form = Form.ActiveForm as Form1; var doSave = MessageBox.Show("Would you like to save this measurement?", "Save Measurement", MessageBoxButtons.YesNo,

我得到一个空引用异常,在我用注释表示的行上。有人知道为什么会这样吗

var form = Form.ActiveForm as Form1;
var doSave = MessageBox.Show("Would you like to save this measurement?",
                             "Save Measurement",
                             MessageBoxButtons.YesNo,
                             MessageBoxIcon.Question);

if (doSave == DialogResult.Yes) // User wants to save the current measurement.
{
    curName = ShowDialog("Measurement Name", "Save Measurement");
    // ERROR HERE **** 
    int ret = form.databaseClass.GetFirstSoundReadyTestOccurrence(form.testNumber.Text);

我敢打赌这是Form.ActiveForm不是Form1类型的情况

这应该很容易复制。在进入此代码之前,请确保您的活动表单不是Form1类型。换句话说。。。确保此代码运行时其他窗体处于活动状态

下面的编辑将修复出现这种情况时的问题,但您确实需要一种更可靠的方式来获取表单。如果不了解更多有关设计的信息,就很难推荐更好的获取表单的方法

var form = Form.ActiveForm as Form1;
if (form != null)
{
var doSave = MessageBox.Show("Would you like to save this measurement?",
                             "Save Measurement",
                             MessageBoxButtons.YesNo,
                             MessageBoxIcon.Question);

if (doSave == DialogResult.Yes) // User wants to save the current measurement.
{
    curName = ShowDialog("Measurement Name", "Save Measurement");
    // ERROR HERE **** 
    int ret = form.databaseClass.GetFirstSoundReadyTestOccurrence(form.testNumber.Text);
}
}

我敢打赌这是Form.ActiveForm不是Form1类型的情况

这应该很容易复制。在进入此代码之前,请确保您的活动表单不是Form1类型。换句话说。。。确保此代码运行时其他窗体处于活动状态

下面的编辑将修复出现这种情况时的问题,但您确实需要一种更可靠的方式来获取表单。如果不了解更多有关设计的信息,就很难推荐更好的获取表单的方法

var form = Form.ActiveForm as Form1;
if (form != null)
{
var doSave = MessageBox.Show("Would you like to save this measurement?",
                             "Save Measurement",
                             MessageBoxButtons.YesNo,
                             MessageBoxIcon.Question);

if (doSave == DialogResult.Yes) // User wants to save the current measurement.
{
    curName = ShowDialog("Measurement Name", "Save Measurement");
    // ERROR HERE **** 
    int ret = form.databaseClass.GetFirstSoundReadyTestOccurrence(form.testNumber.Text);
}
}

发布异常详细信息,包括堆栈跟踪——否则人们只能猜测您的问题。我认为
form
为null,因此
form.ActiveForm
为null或者不是
Form1
的实例。否则,
form.databaseClass
form.testNumber
为空。-调试代码以查看哪个对象为空。如果它没有一直复制:是否确定活动窗体始终是Form1的实例?否则,
Form.ActiveForm as Form1
将返回null,稍后您将得到一个NRE。从@jods的评论中,您可以学到的是,如果您不打算明确处理结果为
null
的情况,则决不要将
as
运算符用于强制转换。改为使用格式转换
(Form1)(form.ActiveForm)
(不需要最后一个括号)。发布异常详细信息,包括堆栈跟踪——否则人们只能猜测您的问题。我猜想
form
为null,因此
form.ActiveForm
为null或者不是
Form1
的实例。否则,
form.databaseClass
form.testNumber
为空。-调试代码以查看哪个对象为空。如果它没有一直复制:是否确定活动窗体始终是Form1的实例?否则,
Form.ActiveForm as Form1
将返回null,稍后您将得到一个NRE。从@jods的评论中,您可以学到的是,如果您不打算明确处理结果为
null
的情况,则决不要将
as
运算符用于强制转换。改为使用格式转换
(Form1)(form.ActiveForm)
(不需要最后一个括号)。