using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace CheckEventSubscription { class Program { public static bool IsSubscribed(object eventPublisher, string eventName, object possibleSubscriber) { // Get the fieldinfo for the internal delegate. FieldInfo delegateField = eventPublisher.GetType().GetField(eventName, BindingFlags.NonPublic | BindingFlags.Instance); // Get the actual delegate instance. Delegate del = delegateField.GetValue(eventPublisher) as Delegate; bool isSubscribed = false; // Remember - if no-one's subscribed, the delegate is null (therefore, return false). if (del != null) { // Go over all the members on the Multicast delegate. foreach (Delegate handler in del.GetInvocationList()) { if (handler.Target == possibleSubscriber) isSubscribed = true; } } return isSubscribed; } static void Main(string[] args) { EventPublisher ep = new EventPublisher(); EventSubscriber es = new EventSubscriber(); bool isSubscribed = false; ep.Event += es.EventHandler; isSubscribed = IsSubscribed(ep, "Event", es); ep.Event -= es.EventHandler; isSubscribed = IsSubscribed(ep, "Event", es); } } public class EventSubscriber { public void EventHandler(object sender, EventArgs e) { } } public class EventPublisher { public event EventHandler Event; } }