How to remove callback listening by anonymous method?

I wrote several classes:

public class A { public A() { serviceAdapter.CompletedCallBackEvent += new EventHandler( foo ); . . . } void foo(object sender, EventArgs e) { serviceAdapter.CompletedCallBackEvent -= new EventHandler( foo ); } } 

Now I want to change this callback listener with some anonymous - but I donโ€™t know how to remove the callback listener in the anonymous method.

 class A { public A() { serviceAdapter.CompletedCallBackEvent += delegate( object sender, EventArgs ee ) { ... need to remove the listener to the event. } } } 
+4
source share
2 answers

You can simply assign your delegate / handler to a private variable.

 private EventHander _handler = null; public A() { _handler = delegate( object sender, EventArgs ee) { ServiceAdapter.CompletedCallBackEvent -= _handler; }; ServiceAdapter.CompletedCallBackEvent += _handler; } 
+4
source

You cannot delete an anonymous delegate. See the MSDN article on anonymous delegates. Also worth reading this article.

Perhaps you can:

  public A() { EventHandler myHandler = null; myHandler = new EventHandler(delegate(object s, EventArgs e) { serviceAdapter.CompletedCallbackEvent -= myHandler; }); serviceAdapter.CompletedCallBackEvent += myHandler; } 
+4
source

All Articles