2012-09-28 24 views

cevap

10

, bir yöntem yapabilirsiniz herhangi biri. Etkinliklerinizin tüm EventHandler<T> olsaydı Örneğin, şunu kullanabilirsiniz:

private void RaiseEvent<T>(EventHandler<T> eventHandler, T eventArgs) 
{ 
    if (eventHandler != null) 
    { 
     eventHandler(this, eventArgs); 
    } 
} 

Daha sonra üzerinden bu diyebiliriz: Reed Copsey cevabının statik sürümü için

this.RaiseEvent(this.MyEvent, new MyEventArgs("Foo")); 
+0

, Yarış durumundan kaçınmak için null'u kontrol etmeden önce işleyiciyi yerel bir değişkene koymaya gerek var mı? –

+0

@ mohsen.d Yarış durumu yok. eventHandler bir parametredir. – CrazyCasta

+0

@Reed Copsey üzgünüm, ama biraz daha açıklayabilir misiniz? teşekkür ederim –

-1

Bkz. this. Ne istediğini açıklıyor.

yapabilirsiniz bir daktilo temsilci kullanarak ve bu etkinlik için kullanarak bir daktilo etkinlik oluşturmak: ile çalışır olay yükseltmek için bu tek bir sınıfın içindeyse

public delegate void myDel<T>(T stuff); 

public event myDel<int> myEvent; 

public doStuff() 
{ 
    myDel(1); 
} 
+1

Sadece OP istediğini yapma görünmüyor bunu yapmaz, bu uygun değildir. [daha fazla bilgi] (http://meta.stackexchange.com/questions/94022/how-can-i-link-to-an-external-resource-in-a-community-friendly-way) bu uygulama ile – Servy

1

, ben statik sınıf oluşturuldu Event :

public static class Event 
{ 
    public static bool Raise<T>(Object source, EventHandler<T> eventHandler, T eventArgs) where T : EventArgs 
    { 
     EventHandler<T> handler = eventHandler; 
     if (handler != null) 
     { 
      handler(source, eventArgs); 
      return true; 
     } 
     return false; 
    } 
} 

Bu aynı zamanda olay işleyicileri tip EventHandler<T> vardır varsayar. Dönüş tipi void'dan bool'a değiştirildi ve olayın dinleyicileri olup olmadığını döndürdü. Nadiren kullanılır, bu yüzden void'a geri dönmek için çekinmeyin.

Örnek kullanım: SO * sadece * o soruya cevap yapsa bile, bir bağlantı sonrası üzerinde

public event EventHandler<FooArgs> FooHappend; 

public void Foo() 
{ 
    Event.Raise(this, FooHappend, new FooArgs("Hello World!"); 
} 
İlgili konular