无法在c#中调用Delegate ResponseRecieved.Invoke()方法

时间:2013-08-27 08:40:51

标签: c# windows delegates invoke

我使用委托来使用带有2个参数的invoke方法。但它给出了空引用异常错误:

  

对象引用未设置为对象的实例。

无法将控制转移到主页面中调用方法。谁能告诉我为什么会这样......?谢谢..

 public override event ResponseRecievedDelegate ResponseRecieved;

    if (reqName == REQUEST_NAME.abc)
        {
            IJsonParser parser = new JsonParser();
            Object resp = parser.GetData(responseString );

            ResponseRecieved.Invoke(reqName, resp); // unable to invoke this method giving null exception ..

        }

调用方法实现如下:

   private void OnResponseReceived(REQUEST_NAME requestName, Object response)
    {
        if (requestName == REQUEST_NAME.abc)
        {
           //------------
        }

        else if (requestName == REQUEST_NAME.def)
        { 
           //------------
        }
    }

1 个答案:

答案 0 :(得分:1)

你需要检查

if(ResponseRecieved != null)

在调用事件之前

一般来说,在使用事件时,在使用它们之前我们需要检查null。你可以阅读关于这个主题的here

  

调用事件 - 一旦类声明了事件,它就可以处理   该事件就像指定的委托类型的字段一样。场   如果没有客户端将委托连接到,则将为null   事件,或者它指的是应该在调用时调用的委托   调用事件。因此,调用事件通常首先完成   检查null然后调用该事件。

如果要调用OnResponseReceived方法,则需要将其注册到事件中。你可以这样做:

ResponseRecieved += OnResponseReceived;

确保OnResponseReceived格式正确,然后在调用事件之前执行此操作。

另一种方式就是调用方法......