So what is the difference between events and delegates? The reality is that currently they are basically the same. The difference is that the += operator that is used to add a delegate function to an event is thread-safe whereas when using a delegate the += operator is not thread-safe.

events have always been multi-cast, meaning that an event might call multiple functions. In the beta version of .NET delegates where single-cast meaning that only a single delegate function would be called. But in the RTM version of .NET 1.0, delegates were made multi-cast.

If you look at the MSIL you'll see more differences. But in general, you can simply remove the event keyword and your program for the most part will work the same as it did.

The main usefulness that I see is that it indicates to the user what your intentions are. A delegate is simply a function pointer that can be used to call custom code such as passing in the comparison function. An event is used to notify the user that a special event has happened such as new mail has arrived.