C# 无法在c中调用委托ResponseRecieved.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(

我使用委托使用带有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)
        { 
           //------------
        }
    }
你需要检查一下

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..现在我将委托注册添加到一个按钮点击流中涉及的所有类中&瞧,它工作得很好!:)