저는 event 예외 처리 할 때 아래와 같이 진행해왔었습니다.

SomethingEvent 이벤트를 아무도 등록하지 않았을때의 예외처리입니다.

 

 

 

public event EventHandler SomethingEvent;

 

        public void RaiseSomethingEvent()

        {

            if (this.SomethingEvent != null)

                this.SomethingEvent(null,null);

        } 

 

 

 

 

아래와 같이 빈 delegate를 이용하면 null이 아니기 때문에 event를 등록한 개체가 없더라도 예외가 발생하지 않습니다.

멀티쓰레드 환경도 기존의 코드와 달리 null 체크를 하지 않기 때문에 아무런 문제없이 잘동작합니다.

 

 

public event EventHandler SomethingEvent = delegate { };

 

        public void RaiseSomethingEvent()

        {

            this.SomethingEvent(null,null);

        } 

 

 

 

아래의 코드도 동일하게 잘 동작합니다.

 

 

 

public event Action<string> SomethingEvent = delegate { };

 

        public void RaiseSomethingEvent()

        {

            this.SomethingEvent("foo");

        }

 

 

 

참고 : Pro Wpf and Silverlight MVVM - Chapter 5. Event and Commands (112p)

+ Recent posts