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