6. 이벤트 생성, 호출 이벤트 변수 null 발생
227
投稿した質問数 27
안녕하세요. 이벤트 생성, 호출을 하다가 다시 배운거 정리하는데 이번에도 문제가 있네요...
제가 소스의 일부분을 드리는것 보다 프로젝트를 통으로 드려야지 문제를 확인할 수 있을거 같아서 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입니다.
14:56의 24번째줄 처럼 +=을 통해 eventhandler등록이 필요해보입니다.
그래도 해결이 안되셨다면 fallingsstar@naver.com로 메일 주시면 되겠습니다.
?.등등관련해서는 신규기초강의에서 다루고 있습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. just kim님.
이벤트 생성과 호출에서 null 참조 문제가 발생하여 질문을 주셨군요. 해당 문제는 이벤트가 구독되지 않았을 때 발생하는 일반적인 문제입니다. 이와 관련된 기존의 유사한 질문과 답변을 참고하시면 도움이 될 것입니다.
관련 답변:
버튼 클릭시 progressBar가 100으로 채워지지 않는 현상:
- 다중 스레드 환경에서 UI 요소 접근 문제를 해결하는 방법 설명.
- 다중 스레드 환경에서 UI 요소 접근 문제를 해결하는 방법 설명.
-
- 이벤트에 구독자가 없을 시 null 체크 방법 제공.
- 이벤트에 구독자가 없을 시 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

