using System; using System.Threading; namespace PlayingWithEventHandlers { //public delegate void EventHandler(object sender, EventArgs e); //public delegate void TimerCallback(object state); //public delegate void Action(T obj); public class PlayingWithEventHandlers { private readonly Action< string > _action; public PlayingWithEventHandlers( Action< string > action ) { _action = action; } public void Handler( object sender, EventArgs e ) { _action( ( string )sender ); } } public class MyEventContainer { private Timer _timer; public MyEventContainer( ) { _timer = new Timer( delegate( object state ) { MyEvent.Invoke( state, EventArgs.Empty ); }, "Tick", 0, 5000 ); } //public MyEventContainer( ) { // _timer = new Timer( TimerClickHandler, "Tick", 0, 5000 ); //} //public void TimerClickHandler( object state ) { // MyEvent.Invoke( state, EventArgs.Empty ); //} public event EventHandler MyEvent; } public class Bootstrap { public static void Main( ) { MyEventContainer container = new MyEventContainer( ); container.MyEvent += new PlayingWithEventHandlers( Console.Out.WriteLine ).Handler; Console.In.ReadLine( ); } } }