6. 이벤트 생성, 호출 이벤트 변수 null 발생
220
27 asked
안녕하세요. 이벤트 생성, 호출을 하다가 다시 배운거 정리하는데 이번에도 문제가 있네요...
제가 소스의 일부분을 드리는것 보다 프로젝트를 통으로 드려야지 문제를 확인할 수 있을거 같아서 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);
}
Answer 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인 경우에도 안전하게 멤버에 접근할 수 있습니다. 이는 특히 이벤트 호출과 같은 경우에서 유용합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
OAuth방식 강의 문의
0
10
0
싱글턴패턴
0
4
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
218
2
LobbyUIController의 백키가 사라졌는데 왜그런건가요?
0
41
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

