2015-01-28 1 views
0

게시자 클래스와 구독자 클래스가 있습니다. 게시자 클래스에는 이벤트가 있으며이 이벤트가 발생하면 구독자는 자체 메서드 중 하나를 실행하려고합니다.C# 게시자 구독자가 작동하지 않는 이벤트 처리

여기의 이벤트 내 게시자 클래스 :

public delegate EventHandler<MyEventArgs> MyEventHandler(object sender, MyEventArgs args); 
public class MyEventArgs : EventArgs 
{ 
    public string Content { set; get; } 
} 

public class Publisher 
{ 
    public event MyEventHandler MyCustomEvent; 

    public void TriggerEvent() 
    { 
     if(MyCustomEvent!=null) 
      MyCustomEvent(this, new MyEventArgs{ Content = "Geeee! This isn't working!" }); 
    } 
} 

그리고 여기에 가입자 :

class Subscriber 
{ 
    static void Main(string[] args) 
    { 
     Publisher publisher = new Publisher(); 

     //hook the event to a method 
     publisher.MyCustomEvent += (s, e) => delegate 
     { 
      PrintThis(e.Content); 
     }; 

     //Do something to trigger the event  
     publisher.TriggerEvent(); 
    } 
    static public void PrintThis(string content) 
    { 
     Console.Write(content); 
    } 
} 

하는 것은 게시자는 가입자의 인식해서는 안된다. 구독자가 게시자가 이벤트를 호출 할 때 PrintThis 함수를 실행할 수있게하려고합니다. 그러나 이것은 효과가 없습니다. 여기서 내가 뭘 잘못하고 있니?

+1

작동하지 않는 기능은 무엇입니까? – Enigmativity

+0

PrintThis 함수의 중단 점은 결코 적중되지 않습니다. 콘솔에 아무 것도 인쇄되지 않습니다. – user3655614

답변

0

이벤트 처리기를 올바르게 정의하지 않았습니다.

이처럼 수행 반환 형식이 void 것을

public delegate void MyEventHandler(object sender, MyEventArgs args); 

알 수 있습니다.

그리고

다음 이벤트 처리기 자체는해야한다 :

publisher.MyCustomEvent += (s, e) => 
    { 
     PrintThis(e.Content); 
    }; 

정의 된 경우에도 귀하의 TriggerEvent 방법은이 방법으로 안전합니다 다음 MyCustomEvent 핸들러 사이 변경할 수있는 멀티 스레드 환경에서

public void TriggerEvent() 
{ 
    var mce = MyCustomEvent; 
    if (mce!=null) 
    { 
     mce(this, new MyEventArgs{ Content = "Geeee! This isn't working!" }); 
    } 
} 

null 점검 및 호출.

+0

아 ... 작동합니다! 고마워요 톤 : 그 차이점은 무엇입니까? 나는 컴파일러가 구문상의 오류를주지 않는다는 것을 의미한다. – user3655614

+0

당신이 명시 적으로'delegate' (당신이 한 것)로 캐스팅한다면 한 델리 게이트에서 다른 델리 게이트로 캐스팅 할 때 컴파일러는 매우 관대합니다. 'delegate' 키워드 만 빼낸다면 에러 메시지를 보았을 것입니다. – Enigmativity

+0

괜찮습니다. 새로운 것을 배웠습니다 :) Thanks – user3655614

관련 문제