From decb4506152e9acd51200a9fb99076eaa4a78f63 Mon Sep 17 00:00:00 2001 From: jpbruyere Date: Fri, 23 Dec 2016 11:08:25 +0100 Subject: Remove old datasource handler if not null --- src/CompilerServices/CompilerServices.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/CompilerServices/CompilerServices.cs') diff --git a/src/CompilerServices/CompilerServices.cs b/src/CompilerServices/CompilerServices.cs index 7dcfd972..38d4590c 100644 --- a/src/CompilerServices/CompilerServices.cs +++ b/src/CompilerServices/CompilerServices.cs @@ -802,6 +802,23 @@ namespace Crow } return null; } + /// + /// Removes delegate from event handler by name + /// + public static void RemoveEventHandler(object instance, string eventName, string delegateName){ + Type t = instance.GetType (); + FieldInfo fiEvt = CompilerServices.GetEventHandlerField (t, eventName); + EventInfo eiEvt = t.GetEvent (eventName); + MulticastDelegate multiDel = fiEvt.GetValue (instance) as MulticastDelegate; + if (multiDel != null) { + foreach (Delegate d in multiDel.GetInvocationList()) { + if (d.Method.Name == delegateName) { + eiEvt.RemoveEventHandler (instance, d); + Debug.WriteLine ("event handler removed: " + delegateName + " in " + t.FullName); + } + } + } + } } } -- cgit v1.3.1-4-g156e