작성
·
64
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);
}
답변 3
0
0
안녕하세요.개발자park입니다.
14:56의 24번째줄 처럼 +=을 통해 eventhandler등록이 필요해보입니다.
그래도 해결이 안되셨다면 fallingsstar@naver.com로 메일 주시면 되겠습니다.
?.등등관련해서는 신규기초강의에서 다루고 있습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. just kim님.
이벤트 생성과 호출에서 null 참조 문제가 발생하여 질문을 주셨군요. 해당 문제는 이벤트가 구독되지 않았을 때 발생하는 일반적인 문제입니다. 이와 관련된 기존의 유사한 질문과 답변을 참고하시면 도움이 될 것입니다.
버튼 클릭시 progressBar가 100으로 채워지지 않는 현상:
이벤트가 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인 경우에도 안전하게 멤버에 접근할 수 있습니다. 이는 특히 이벤트 호출과 같은 경우에서 유용합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.