2013-08-27 1 views
-1

대리자를 사용하여 2 개의 매개 변수로 호출 메서드를 사용하고 있습니다. null 참조 예외 오류가 발생했습니다.대리자를 사용하여 ResponseRecieved.Invoke() 메서드를 호출 할 수 없습니다. #

Object reference not set to an instance of an object.

기본 페이지에서 메소드 호출을 제어 할 수 없습니다. 아무도 왜 그렇게 말할 수 있습니까 ..? 이벤트를 사용하는 경우, 이벤트 일반적으로

를 호출하기 전에

if(ResponseRecieved != null) 

를 확인해야

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

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

어디서나 'ResponseRecieved'에 첨부 하시겠습니까? ('ResponseRecieved + = ....') – I4V

답변

1

전에 :처럼 덕분에 ..

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 .. 

     } 

invoke 메소드의 구현은 그들을 사용하여 null을 확인해야합니다. 당신이 OnResponseReceived 방법을 사용하여 이벤트에 등록 할 필요가 호출되도록하려는 경우, 당신은 주제

Invoking an event - Once a class has declared an event, it can treat that event just like a field of the indicated delegate type. The field will either be null, if no client has hooked up a delegate to the event, or else it refers to a delegate that should be called when the event is invoked. Thus, invoking an event is generally done by first checking for null and then calling the event.

here를 읽을 수 있습니다. 당신은 이런 식으로 작업을 수행 할 수 있습니다

ResponseRecieved += OnResponseReceived; 

OnResponseReceived가 올바른 형식으로되어 있는지 확인하고 이벤트를 호출하기 전에 당신이 그것을 할.

다른 방법은 방금 메서드를 호출합니다 ...

+0

예 .. 다음과 같은 버튼 클릭 이벤트에 첨부합니다. 개인 무효 btn_Click (객체 발신자, RoutedEventArgs e) { ICAPI api = new CAPI(); api.ResponseRecieved + = 새 C.Model.Comm.ResponseRecievedDelegate (OnResponseReceived); } – Marie

+0

ResponseReceived가 null 또는 null이 아니어도이 메서드를 호출하고 실행해야합니다. 메서드 구현을 호출하고 null 예외를주는 컨트롤을 전송하지 않습니다. 처리 방법은 무엇입니까? – Marie

+0

@Marie 대답 –

관련 문제