using System.Threading.Tasks;
public static void AddNonPublicEventHandler(object eventObject, string eventName, Delegate handler)
var eventInfo = eventObject.GetType().GetEvent(eventName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
eventInfo.AddEventHandler(eventObject, handler);
private event EventHandler MyPrivateEvent;
public void TriggerEvent()
MyPrivateEvent?.Invoke(this, EventArgs.Empty);
private static void MyEventHandler(object sender, EventArgs e)
Console.WriteLine("Event triggered");
public static void ExampleUsage()
var eventClassInstance = new EventClass();
EventHandler handler = MyEventHandler;
AddNonPublicEventHandler(eventClassInstance, "MyPrivateEvent", handler);
eventClassInstance.TriggerEvent();
public static async Task Main()