// Wrap event invocations inside a protected virtual method to allow derived classes to override the event invocation behavior protected virtual void OnRaiseCustomEvent(CustomEventArgs e) { // Make a temporary copy of the event to avoid possibility of a race condition if the last subscriber unsubscribes // immediately after the null check and before the event is raised. EventHandler<CustomEventArgs> handler = this.RaiseCustomEvent; // Event will be null if there are no subscribers if (handler != null) { // Format the string to send inside the CustomEventArgs parameter e.Message += string.Format(" at {0}", DateTime.Now.ToLongTimeString()); // Use the () operator to raise the event. handler(this, e); } }
// Define what actions to take when the event is raised. public void HandleCustomEvent(object sender, CustomEventArgs e) { Console.WriteLine(this.id + " received this message: {0}", e.Message); }