Dites si j'écoute pour un événement:
Subject.NewEvent += delegate(object sender, NewEventArgs e)
{
//some code
});
Maintenant, comment désinscrire cet événement? Ou simplement laisser la mémoire couler?
Dites si j'écoute pour un événement:
Subject.NewEvent += delegate(object sender, NewEventArgs e)
{
//some code
});
Maintenant, comment désinscrire cet événement? Ou simplement laisser la mémoire couler?
Pour supprimer le gestionnaire lors de la première invocation:
//SubjectType Subject = ..... already defined if using (2)
EventHandler handler = null;
handler = delegate(object sender, EventArgs e)
{
// (1)
(sender as SubjectType).NewEvent -= handler;
// or
// (2) Subject.NewEvent -= handler;
// do stuff here
};
Subject.NewEvent += handler;
Vous pouvez créer une méthode de désinscription de tous les écouteurs d'événement. Ce n'est pas exactement ce que vous voulez, mais parfois cela peut être utile. Par exemple (ça marche vraiment =)):
class Program {
static void Main(string[] args) {
A someClass = new A();
someClass.SomeEvent += delegate(object sender, EventArgs e) {
throw new NotImplementedException();
};
someClass.ClearEventHandlers();
someClass.FireEvent();
Console.WriteLine("No error.");
}
public class A {
public event EventHandler SomeEvent;
public void ClearEventHandlers() {
Delegate[] delegates = SomeEvent.GetInvocationList();
foreach (Delegate delegate in delegates) {
SomeEvent -= (EventHandler) delegate;
}
}
public void FireEvent() {
if (SomeEvent != null) {
SomeEvent(null, null);
}
}
}
}
Vous avez besoin d'un nom pour votre fonction anonyme et vous ne pouvez le faire que tant que le nom est dans la portée:
var handler = new EventHandler(delegate(object o, EventArgs e)
{
//do something...
};
Subject.NewEvent += handler;
// later on while handler is still in scope...
Subject.NewEvent -= handler;
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.