public static void Raise<TEventArgs>(this object source, string eventName,
TEventArgs eventArgs) where TEventArgs : EventArgs
{
var eventInfo = source.GetType().GetEvent(eventName,
BindingFlags.Public | BindingFlags.NonPublic
| BindingFlags.Instance);
var eventDelegate = (MulticastDelegate)source.GetType()
.GetField(eventName, BindingFlags.Instance
| BindingFlags.NonPublic).GetValue(source);
if (eventDelegate != null)
{
foreach (var handler in eventDelegate.GetInvocationList())
{
handler.Method.Invoke(handler.Target,
new object[] { source, eventArgs });
}
}
}