开发者

How to remove the event?

For Sample ....

SampleClass :

public class SampleClass
{
    public delegate void BeforeEditorHandle();
    public event BeforeEditorHandle OnBeforeEditor;
}

MainMethod

    static void Main(string[] args)
    {
        SampleClass sc = new SampleClass();
        // Add Event
        sc.OnBeforeEditor +=new SampleClass.BeforeEditorHandle(sc_OnBeforeEditor);
        // Remove Event
        sc.OnB开发者_Python百科eforeEditor -= new SampleClass.BeforeEditorHandle(sc_OnBeforeEditor);

    }

And , if I add the event by dynamic like this ...↓

sc.OnBeforeEditor += () => {  };

Should I remove the event like ↓

sc.OnBeforeEditor -= () => {  }; 

But I think this is very ugly when I have too much sources in the event.... Can anybody tell me the best way to remove the event please ?


You can assign the event handler/lambda to a variable which you can then subscribe and unsubscribe:

var myHandler = () => {  };

sc.OnBeforeEditor += myHandler;

sc.OnBeforeEditor -= myHandler;


I'm pretty sure your code here won't work:

And , if I add the event by dynamic like this ...↓

sc.OnBeforeEditor += () => {  };

Should I remove the event like ↓

sc.OnBeforeEditor -= () => {  };

This is because restating the lambda creates a new different lambda.

You need to store the old reference and use it to unsubscribe:

BeforeEditorHandle myHandler=() => {  }
sc.OnBeforeEditor += myHandler;

...
sc.OnBeforeEditor -= myHandler;

For easier unsubscribing you can collect your event handlers in a collection (For example List<BeforeEditorHandle>).


From MSDN:

It is important to notice that you cannot easily unsubscribe from an event if you used an anonymous function to subscribe to it. To unsubscribe in this scenario, it is necessary to go back to the code where you subscribe to the event, store the anonymous method in a delegate variable, and then add the delegate to the event. In general, we recommend that you do not use anonymous functions to subscribe to events if you will have to unsubscribe from the event at some later point in your code. For more information about anonymous functions, see Anonymous Functions (C# Programming Guide).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜