inflearn logo
강의

講義

知識共有

WinForms C#.NetFramework 0.5年目〜3年目(パート1)

6.イベント生成、呼び出し

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

227

just kim

投稿した質問数 27

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);

}

 

 

 

C# .net

回答 3

0

vmproductor0202

안녕하세요.

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

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

감사합니다.

0

vmproductor0202

안녕하세요.개발자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

communityai8509

안녕하세요, 인프런 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인 경우에도 안전하게 멤버에 접근할 수 있습니다. 이는 특히 이벤트 호출과 같은 경우에서 유용합니다.

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

19강 15_2) 템블릿에 List가 없는경우는 어떻게 해야되나요?

0

14

1

Spider와 Monster 구현 방식을 구분한 이유

1

16

1

Sprute Sheet에 대해서.

0

13

1

15강 12-3) 값 제출후 mysql 저장이 안됩니다.

0

16

2

혹시 언리얼 CEF기반 UI에서 한글 입력 오류 해결하신분??

0

30

2

ResourceManager 클래스 관련 질문

1

35

2

크레딧 충전

0

42

1

수업자료 관련

0

28

1

첨부된 수업자료와 강의 내용이 다릅니다.

0

51

2

몬스터 HP 게이지바 이동

0

23

1

비주얼 스튜디오 2026

0

43

2

C#에서의 RAII

0

67

3

public string Title { get; set; } 에서 WFO1000 오류가납니다.

0

45

1

Lessons 3 & 4 don't have subtitles unfortunately

0

40

1

강의자료 누락

0

73

1

매니저 관련 질문이 있습니다.

0

72

2

System.InvalidOperationException: '크로스 스레드 작업이 잘못되었습니다. 'label1' 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다.'

0

336

2

2강 Thread sync 질문 입니다.

0

212

1

강사님.. 에러가 왜 뜰까요?

0

332

1

3강에서

0

226

1

IAsyncResult를 쓰는 이유

0

664

1

BeginIvoke

0

392

1

델리게이트 관련

0

280

1

1강 멀티 쓰레드 부문 수강 중입니다.

0

321

1