我使用委托来使用带有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)
{
//------------
}
}
答案 0 :(得分:1)
你需要检查
if(ResponseRecieved != null)
在调用事件之前
一般来说,在使用事件时,在使用它们之前我们需要检查null。你可以阅读关于这个主题的here
调用事件 - 一旦类声明了事件,它就可以处理 该事件就像指定的委托类型的字段一样。场 如果没有客户端将委托连接到,则将为null 事件,或者它指的是应该在调用时调用的委托 调用事件。因此,调用事件通常首先完成 检查null然后调用该事件。
如果要调用OnResponseReceived
方法,则需要将其注册到事件中。你可以这样做:
ResponseRecieved += OnResponseReceived;
确保OnResponseReceived
格式正确,然后在调用事件之前执行此操作。
另一种方式就是调用方法......