inflearn logo
강의

講義

知識共有

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

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

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

266

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

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

수박게임 자료 받았는데 plante05, 06이 없습니다.

0

26

1

14강 녹음이 안되어 있습니다

0

38

1

유니티webgl 과 안티그래비티를 협업시키고 싶습니다.

0

42

2

소스를 받을 수 있는 링크가 있을까요?

0

70

2

프로덕션 부분 사용 불가

0

72

2

접근지정자

0

71

2

섹터2 5강 Authconfig 문의

0

67

1

in-app purchasing 버튼의 install 버튼이 비활성화되어있을때 어떻게 해결해야하나요 ?

0

52

2

유니티 제외 설치한 프로그램들 및 파일 삭제 방법

0

58

1

깃허브에서 콤피유아이 매니저 설치하는게 안됩니다.

0

82

2

5강, 오류 수정과 관련해서

0

67

2

컴퓨터를 껐다가 클로드 코드 다시 키는 방법 알려주세요.

0

68

1

Pivot을 마우스로 클릭하고 드래그해도 움직이 않아서 혹시 아시는 부분이 있나 해서 문의 남깁니다.

0

59

1

클로드에 텍스트 없이 이미지만 보낼경우 에러가 생깁니다

0

94

2

클로드 코드 API 요금관련 질문

0

108

1

카메라가 많아지면 렌더링 비용이 커지나요?

0

48

1

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

0

363

2

2강 Thread sync 질문 입니다.

0

227

1

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

0

348

1

3강에서

0

237

1

IAsyncResult를 쓰는 이유

0

687

1

BeginIvoke

0

413

1

델리게이트 관련

0

290

1

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

0

336

1