인프런 커뮤니티 질문&답변

just kim님의 프로필 이미지
just kim

작성한 질문수

C#.NET 0.5년차~3년차(파트1)

6.이벤트 생성,호출

6. 이벤트 생성, 호출 이벤트 변수 null 발생

작성

·

64

0

안녕하세요. 이벤트 생성, 호출을 하다가 다시 배운거 정리하는데 이번에도 문제가 있네요...

 

제가 소스의 일부분을 드리는것 보다 프로젝트를 통으로 드려야지 문제를 확인할 수 있을거 같아서 git에 올렸어요

https://github.com/justkjy/ThreadTest

그래도 간단하게 요약 하면

public delegate void SampleEventHandler(int persent);

public event SampleEventHandler OnEvent;

 

작성한다음에

 

버튼을 클릭하면 이벤트가 발생됩니다.

OnEvent가 계속 null이네요.. BeginInvoke 해도 null이구..

그리고 요즘 C#은 kotlin 처럼 널 처리(?.)도 하네요..

언제부터 이런 기능이 생겼지 .....

 

 

private void button1_Click(object sender, EventArgs e)

{

/*this.BeginInvoke(new Action(() =>

{

OnEvent(1);

}));*/

OnEvent?.Invoke(10);

}

 

 

 

답변 3

0

개발자Park님의 프로필 이미지
개발자Park
지식공유자

안녕하세요.

추가적으로 메일 발송하신 것을 방금 확인했습니다.

방금 메일 답변을 드렸습니다.

감사합니다.

0

개발자Park님의 프로필 이미지
개발자Park
지식공유자

안녕하세요.개발자park입니다.

https://www.inflearn.com/course/lecture?courseSlug=%EB%8B%B7%EB%84%B7-%EC%9C%88%ED%8F%BC-1&unitId=77893&tab=curriculum

14:56의 24번째줄 처럼 +=을 통해 eventhandler등록이 필요해보입니다.

그래도 해결이 안되셨다면 fallingsstar@naver.com로 메일 주시면 되겠습니다.

?.등등관련해서는 신규기초강의에서 다루고 있습니다.

감사합니다.

 

 

0

안녕하세요, 인프런 AI 인턴입니다. just kim님.

이벤트 생성과 호출에서 null 참조 문제가 발생하여 질문을 주셨군요. 해당 문제는 이벤트가 구독되지 않았을 때 발생하는 일반적인 문제입니다. 이와 관련된 기존의 유사한 질문과 답변을 참고하시면 도움이 될 것입니다.

관련 답변:

  1. 버튼 클릭시 progressBar가 100으로 채워지지 않는 현상:

    • 다중 스레드 환경에서 UI 요소 접근 문제를 해결하는 방법 설명.
  2. 강사님.. 에러가 왜 뜰까요?:

    • 이벤트에 구독자가 없을 시 null 체크 방법 제공.

문제 해결 요약:

이벤트가 null인 경우, 즉 이벤트에 구독자가 없을 경우 이를 안전하게 호출하기 위해서는 null 체크를 해야 합니다. 이를 위해 ?.Invoke 구문을 사용합니다. C#에서 null 조건 연산자는 C# 6.0부터 지원되기 시작했습니다.

private void button1_Click(object sender, EventArgs e)
{
    OnEvent?.Invoke(10);
}

위 코드와 같이 null 조건 연산자를 사용하여 이벤트가 null인 경우에도 예외가 발생하지 않도록 할 수 있습니다. 예전 방식으로는 다음과 같이 null 체크를 해주어야 했습니다.

private void button1_Click(object sender, EventArgs e)
{
    if (OnEvent != null)
    {
        OnEvent(10);
    }
}

추가 설명:

C#에서는 null 조건 연산자 ?.를 사용하여 객체가 null인 경우에도 안전하게 멤버에 접근할 수 있습니다. 이는 특히 이벤트 호출과 같은 경우에서 유용합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

just kim님의 프로필 이미지
just kim

작성한 질문수

질문하기