Friday 15 July 2011

vb.net - How to remove all event handlers from an event? -



vb.net - How to remove all event handlers from an event? -

i have next class

public class simpleclass public event simpleevent() public sub simplemethod() raiseevent simpleevent() end sub end class

i instanciate

obj = new simpleclass addhandler obj.simpleevent, sub() msgbox("hi !") end sub

and i'm trying remove event handler dynamically-created using code in : code project

(i assume complex application it's hard utilize : removehandler obj.event, addressof me.eventhandler)

in code there next method

private shared sub buildeventfields(t type, lst list(of fieldinfo)) each ei eventinfo in t.getevents(allbindings) dim dt type = ei.declaringtype dim fi fieldinfo = dt.getfield(ei.name, allbindings) if fi isnot nil lst.add(fi) end if next end sub

but when calling code using object type, next line returns nothing

dim fi fieldinfo = dt.getfield(ei.name, allbindings)

means somehow event not recognized field.

does know how remove event handlers event ?

cheers in advance.

it lambda look getting problem here. don't dig deeper hole, utilize addressof , private method instead can trivially utilize removehandler statement.

if absolutely have maintain in mind vb.net compiler auto-generates backing store field event same name event "event" appended. makes code work:

dim obj = new simpleclass addhandler obj.simpleevent, sub() msgbox("hi !") end sub dim fi = gettype(simpleclass).getfield("simpleeventevent", bindingflags.nonpublic or bindingflags.instance) fi.setvalue(obj, nothing) obj.simplemethod() '' no message box

i'll reiterate should not this.

vb.net reflection

No comments:

Post a Comment