I want to set an event handler only if this is not set:
If GetHandlers(MyWindow.Closed, AddressOf MyWindow_Closed).Length = 0 Then
AddHandler MyWindow.Closed, AddressOf MyWindow_Closed
EndIf
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
You can’t really query the current value of the event’s delegate, except in the code that defines the event. What is your intent here? Normally you shouldn’t be too concerned (necessarily) with other subscribers? There are ways of hacking past the encapsulation to find the current value, but they are not recommended (it just isn’t a good idea).
If your concern is whether you are already handling that event with that handler (i.e. you don’t want to double-subscribe, then you can always either a: fix the code so it doesn’t do this, or b: cheat (C# example):
To get the invocation list is… brittle but doable. In simple cases you can just use reflection to get the field, and snag the value. But with forms etc it uses sparse techniques (to minimise the space for events without subscribers). In the case of
FormClosed, this is keyed viaEVENT_FORMCLOSED.It might make more sense with an example (C#, sorry):
In the case of an
ObservableCollection<T>, the delegate is directly on a field, so less indirection is required: