public interface IUnsubscribe
void Unsubscribe(TransientEventHandler handler);
public delegate void TransientEventHandler(object sender, EventArgs e, IUnsubscribe unsubscribe);
public class EventBus : IUnsubscribe
protected event TransientEventHandler Clicked;
public void Subscribe(EventHandler handler)
Clicked += delegate (object sender, EventArgs e, IUnsubscribe bus) { handler(sender, e); };
public void Subscribe(TransientEventHandler handler)
Clicked(this, new EventArgs(), this);
public void Unsubscribe(TransientEventHandler handler)
static private bool unsub = false;
private static void SimulateClick(EventBus bus)
public static void MyHandler(object sender, EventArgs e, IUnsubscribe unsubscribe)
Console.WriteLine("MyHandler - Handling click");
Console.WriteLine("MyHandler - Unsubscribing");
unsubscribe.Unsubscribe(MyHandler);
public static void Main()
Console.WriteLine("Main - sending click");
Console.WriteLine("Main - telling handler to unsubscribe next time it runs");
Console.WriteLine("Main - sending click");
Console.WriteLine("Main - sending click");
Console.WriteLine("Main - sending click");