Comment s’abonner aux événements d’une autre classe en c #?

Un scénario simple: une classe personnalisée qui déclenche un événement. Je souhaite consumr cet événement dans un formulaire et y réagir. Comment je fais ça? Des exemples de code, s’il vous plaît!

Notez que la fiche et la classe personnalisée sont des classes séparées.

public class EventThrower { public delegate void EventHandler(object sender, EventArgs args) ; public event EventHandler ThrowEvent = delegate{}; public void SomethingHappened() { ThrowEvent(this, new EventArgs()); } } public class EventSubscriber { private EventThrower _Thrower; public EventSubscriber() { _Thrower = new EventThrower(); //using lambda expression..could use method like other answers on here _Thrower.ThrowEvent += (sender, args) => { DoSomething(); }; } private void DoSomething() { //Handle event..... } } 

Dans votre formulaire:

 void SubscribeToEvent(OtherClass theInstance) { theInstance.SomeEvent += this.MyEventHandler; } void MyEventHandler(object sender, EventArgs args) { // Do something on the event } 

Vous venez de vous abonner à l’événement sur l’autre classe de la même manière que vous le feriez pour un événement dans votre formulaire. Les trois points importants à retenir:

1) Vous devez vous assurer que votre méthode (gestionnaire d’événements) dispose de la déclaration appropriée pour correspondre au type de délégué de l’événement sur l’autre classe.

2) L’événement sur l’autre classe doit être visible pour vous (c’est-à-dire: public ou interne).

3) Inscrivez-vous sur une instance valide de la classe, pas sur la classe elle-même.

En supposant que votre événement soit géré par EventHandler, ce code fonctionne:

 protected void Page_Load(object sender, EventArgs e) { MyClass myObj = new MyClass(); myObj.MyEvent += new EventHandler(this.HandleCustomEvent); } private void HandleCustomEvent(object sender, EventArgs e) { //handle the event } 

Si votre “événement personnalisé” nécessite une autre signature à gérer, vous devrez utiliser celle-ci à la place.