A Handy Extension Method: Raise Events Safely
Raising events is a very common practice. We do that a lot and it’s pretty irritating to check for nullity every time:
if (eventHandler != null)
{
eventHandler(sender, e);
}
|
Here comes extensions methods to our aid again. With only two extension methods, we can cover all possible event handlers and raise our events safely in one line. For example:
MyEvent.RaiseSafe(this, EventArgs.Empty);
|
Or
MyEvent.RaiseSafe<MyEventArgs>(this, new MyEventArgs(someParameter));
|
In order to achieve that, here are the needed extension methods:
public static class Extensions
{
/// <summary>
/// Raises the event in a safe way.
/// </summary>
/// <param name="eventHandler">The event handler.</param>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
static public void RaiseSafe(this EventHandler eventHandler, object sender, System.EventArgs e)
{
if (eventHandler != null)
{
eventHandler(sender, e);
}
}
/// <summary>
/// Raises the event in a safe way.
/// </summary>
/// <typeparam name="T">Type of the event handler.</typeparam>
/// <param name="eventHandler">The event handler.</param>
/// <param name="sender">The sender.</param>
/// <param name="e">The event arguments containg that event data.</param>
static public void RaiseSafe<T>(this EventHandler<T> eventHandler, object sender, T e)
where T : System.EventArgs
{
if (eventHandler != null)
{
eventHandler(sender, e);
}
}
}
|
All the best,
Shay
