c#调用委托函数抛出System.NullReferenceException

时间:2014-02-10 12:59:52

标签: c# multithreading delegates nullreferenceexception

我有两个表单,一个FormMain和一个FormInputTagName。 FormMain使用FormInputTagName作为对话框从用户获取字符串。 为此我在FormInputTagName中声明了一个委托,这里是代码:

public partial class FormInputTagName : Form
{
    public delegate void ResultDelegate(string tagName);

    public ResultDelegate _resultDelegate;

    public void InputTagName(ResultDelegate resultDelegate)
    {
        this.ShowDialog();
        _resultDelegate = resultDelegate;
    }

    private void Ok_Click(object sender, EventArgs e)
    {
        this.Hide();
        _resultDelegate(textBoxElementTagName.Text);
    }
}

以防万一,_resultDelegate是公开的,但它没有解决问题。

在FormMain中,我有一个方法,签名为委托声明:

    public void AddElement(string tagName)
    {
        MessageBox.Show(tagName);
    }

一个代码(也在FormMain中),调用FormInputTagName将AddElement作为委托实例传递给它:

    private void addToolStripMenuItem_Click(object sender, EventArgs e)
    {
        FormInputTagName inputForm = new FormInputTagName();
        inputForm.InputTagName(new FormInputTagName.ResultDelegate(AddElement));
    }

当我运行程序并在textBoxElementTagName中输入一些文本并单击Ok按钮时,它会在行

处抛出System.NullReferenceException
_resultDelegate(textBoxElementTagName.Text);

可能是什么原因?可以是我以同步方式调用委托,我应该使用BeginInvoke / EndInvoke调用它吗? 还有一件事 - 如果我不将委托保存到类成员_resultDelegate中,而是立即调用它,就像那样

public void InputTagName(ResultDelegate resultDelegate)
{
    this.ShowDialog();
    resultDelegate("qwer");
}

它工作正常并调用AddElement函数。

0 个答案:

没有答案