inflearn logo
강의

講義

知識共有

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

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

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

220

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

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

OAuth방식 강의 문의

0

12

0

싱글턴패턴

0

7

1

코드 관련 질문

0

21

2

섹션7 수업자료 업로드 부탁드립니다.

0

22

2

Dictionary Key를 int에서 string으로 변경한 이유에 대한 문의

0

19

1

프로젝트 질문 문의

0

46

1

UI 기능 관련 질문이 있습니다!

0

37

2

TLS 질문드립니다.

0

43

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

46

2

픽셀 좌표 스크린 좌표

0

33

0

Locomotion랑 Turn 이 꼭 부모 자식 관계일 필요가 있나요?

0

25

1

Rider대신 VS를 써도 괜찮나요?

0

117

2

Claude Code Pro구독하고 있는 상태에서 크레딧 결제, 사용문의

0

220

2

LobbyUIController의 백키가 사라졌는데 왜그런건가요?

0

42

2

무조건 타이틀 씬부터 시작해야하나요?

0

41

1

BaseUI, UIManager

0

51

3

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

0

327

2

2강 Thread sync 질문 입니다.

0

205

1

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

0

325

1

3강에서

0

221

1

IAsyncResult를 쓰는 이유

0

653

1

BeginIvoke

0

385

1

델리게이트 관련

0

274

1

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

0

316

1