This extension method, applied to the object class and then available for all classes, allows to raise any events via reflection, providing as parameters the event name (as a string) and the TEvenArgs generic parameter.
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);
...