2010-05-11 1 views
1

예 나는 노동자 계급에게C#에서 이벤트를 발생시키는 바로 가기/손쉬운 (VB) 스타일 방법이 있습니까? VB에서

Public Class worker 
    Public Event EventNumber1(ByVal messages As Dictionary(Of Integer, String)) 
    Public Event EventNumber2(ByVal message As String) 

    Public Sub CallEventNumber1() 
     Dim dict As New Dictionary(Of Integer, String) 
     dict.Add(1, "EventNumber1 First message") 
     dict.Add(2, "EventNumber1 Second message") 
     RaiseEvent EventNumber1(dict) 
    End Sub 

    Public Sub CallEventNumber2() 
     RaiseEvent EventNumber2("I am an EventNumber2 Message") 
    End Sub 
End Class 

이 있고 작업자 클래스

class Worker 
    { 
     public delegate void EventNumber1Handler(Dictionary<int, string> messages); 
     public delegate void EventNumber2Handler(string message); 
     public event EventNumber1Handler EventNumber1; 
     public event EventNumber2Handler EventNumber2; 

     public void CallEventNumber1() 
     { 
      Dictionary<int, string> dict = new Dictionary<int, string>(); 
      dict.Add(1, "EventNumber1 First message"); 
      dict.Add(2, "EventNumber1 Second message"); 
      if (EventNumber1 != null) 
       EventNumber1(dict); 
     } 

     public void CallEventNumber2() 
     { 
      if (EventNumber2 != null) 
       EventNumber2("I am an EventNumber2 Message"); 
     } 
    } 

최대 와이어 그와

AddHandler _worker.EventNumber1, AddressOf EventNumber1Handler 
AddHandler _worker.EventNumber2, AddressOf EventNumber2Handler 

와 C#으로 다른 클래스에서 그들을 철사

worker.EventNumber1 += new Worker.EventNumber1Handler(worker_EventNumber1); 
worker.EventNumber2 += new Worker.EventNumber2Handler(worker_EventNumber2); 

그래서 내 질문에 항상 C#에서 이벤트와 함께 대리인을 추가해야합니까? C# 3.0/4.0에 대한 새로운 구문이 있습니까?

감사

_Eric

답변

3

그리고 이벤트가 항상 서명이 있어야 강력한 추천이 :

delegate void MyEvent(objectr sender, MyEventArgs e); 

그래서 당신은 또한 클래스에있는 EventArgs에서 파생 작성해야는 사전을 캡슐화하십시오.

좋은 소식은 보통 EventHandler <> 및 동작 <> 클래스로 해결할 수 있다는 것입니다.

public event Action<Dictionary<int,string>> EventNumber1; 
관련 문제