EventInfo ei = threadobj.GetType().GetEvent("ThreadEvent", BindingFlags.IgnoreCase | BindingFlags.Public
| BindingFlags.Static | BindingFlags.Instance);
if (ei != null)
{
// can only get the delegates via a Field access
FieldInfo field = threadobj.GetType().GetField("ThreadEvent", BindingFlags.NonPublic | BindingFlags.Instance);
EventHandler eh = field.GetValue(threadobj) as EventHandler;
//ei.RemoveEventHandler(threadobj,dels[0]); //could remove a single event
MethodInfo mi = ei.GetRemoveMethod();
foreach (Delegate del in eh.GetInvocationList()) // remove all
ei.GetRemoveMethod().Invoke(threadobj, new object[] { del });
ei.AddEventHandler(threadobj, new EventHandler(this.ThreadEvent));
}
else
throw new Exception("Event does not exist in object.");