C# 无法在c中调用委托ResponseRecieved.Invoke()方法#
我使用委托使用带有2个参数的invoke方法。但它给出了空引用异常错误: 对象引用未设置为对象的实例 无法将控件转换为调用主页面中的方法。有人能告诉我为什么是这样吗。。?谢谢C# 无法在c中调用委托ResponseRecieved.Invoke()方法#,c#,windows,delegates,invoke,C#,Windows,Delegates,Invoke,我使用委托使用带有2个参数的invoke方法。但它给出了空引用异常错误: 对象引用未设置为对象的实例 无法将控件转换为调用主页面中的方法。有人能告诉我为什么是这样吗。。?谢谢 public override event ResponseRecievedDelegate ResponseRecieved; if (reqName == REQUEST_NAME.abc) { IJsonParser parser = new JsonParser(
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)
{
//------------
}
}
你需要检查一下
if(ResponseRecieved != null)
在调用事件之前
通常,在使用事件时,在使用它们之前,我们需要检查null。你可以读关于这个主题的书
调用事件-一旦类声明了事件,它就可以处理
该事件就像指示的委托类型的字段一样。田野
如果没有客户端将委托连接到
事件,否则它将引用在
事件被调用。因此,调用事件通常由
检查null,然后调用事件
如果希望调用OnResponseReceived
方法,则需要将其注册到事件中。您可以这样做:
ResponseRecieved += OnResponseReceived;
确保OnResponseReceived
格式正确,并在调用事件之前执行此操作
另一种方法是调用方法…您是否在任何地方附加到event
ResponseReceived
?(ResponseRecieved+=..
)是。。我将其附加到按钮单击事件中,如下所示:private void btn_click(对象发送方,RoutedEventArgs e){ICAPI api=new CAPI();api.ResponseRecieved+=new C.Model.Comm.responseRecievedElegate(OnResponseReceived);}无论ResponseReceived是否为null,我都需要调用并运行此方法。。但它并没有将控制权转移到调用方法实现&给出null异常,如何处理它?检查。。但同样的例外(@Marie请分享例外情况的堆栈跟踪在我的项目中,我使用多组类来移动/获取不同类的数据等等&我只是将我的委托注册到一个MainPage.cs类,这就是为什么我得到错误:对象引用未设置为对象的实例。因为每次我实例化一个类的对象,ResponseReceived变为null..现在我将委托注册添加到一个按钮点击流中涉及的所有类中&瞧,它工作得很好!:)