Learn to use C# delegates and events. Excerpt: n programming,
you are often faced with situations where you need to execute a
particular action, but you don’t know in advance which method,
or even which object, you’ll want to call upon to execute it.
For example, a button might know that it must notify some object
when it is pushed, but it might not know which object or objects
need to be notified. Instead of wiring the button to a
particular object, you will connect the button to a delegate and
then resolve that delegate to a particular method when the
program executes. In the early, dark, and primitive days of
computing, a program would begin execution and then proceed
through its steps until it completed. If the user was involved,
the interaction was strictly controlled and limited to filling
in fields. Today’s GUI programming model requires a different
approach, known as event driven programming. A modern program
presents the user interface and waits for the user to take an
action. The user might take man