Types of event in c#

Types of event in c#
In this article [Show more]

     

    Mastering Event Handling in C#

    Event handling in C# is a fundamental concept in software design, particularly in developing applications with interactive user interfaces or those that require inter-component communication. Events provide a way for objects to broadcast important happenings to interested parties in a loosely coupled manner. This article will cover the basics of event handling in C#, illustrating how to define events, subscribe to them, and handle them effectively.

    Understanding Events in C#

    An event in C# is a mechanism that classes use to provide notifications to clients of that class when something of interest occurs. The typical use of events follows the publisher-subscriber model where the publisher determines when an event is triggered, and the subscriber handles the event.

    Step-by-Step Guide to Event Handling

    Let’s dive into the process of creating and using events in a C# application.

    Step 1: Define the Event

    Events are based on delegates, which define the signature of the methods that can respond to the event.

    Define a Delegate

    First, define a delegate that specifies the signature that event handlers must match.

     

    public delegate void EventHandler(string message);
    

    Declare an Event

    Within a class, declare an event with the delegate type.

     

    public class Publisher {    // Declare the event using the delegate    public event EventHandler ProcessCompleted; }

    Step 2: Raising the Event

    Within the publisher class, provide a method that raises the event. This method should check if the event has subscribers before trying to raise the event to avoid a null reference exception.

     

    public void StartProcess()
    {
        Console.WriteLine("Process Started.");
        // Code to start the process
        OnProcessCompleted("Process Completed Successfully.");
    }
    
    protected virtual void OnProcessCompleted(string message)
    {
        // Raise the event in a thread-safe manner using the null-conditional operator.
        ProcessCompleted?.Invoke(message);
    }
    

    Step 3: Handling the Event

    Create a subscriber class that will handle the event. This class will have a method that matches the delegate signature.

     

    public class Subscriber
    {
        public void OnProcessCompleted(string message)
        {
            Console.WriteLine($"Received message: {message}");
        }
    }
    

    Step 4: Subscribing to the Event

    The final step is to subscribe to the event using an instance of the subscriber class.

     

    public class Program
    {
        public static void Main()
        {
            Publisher publisher = new Publisher();
            Subscriber subscriber = new Subscriber();
    
            // Subscribe to the event
            publisher.ProcessCompleted += subscriber.OnProcessCompleted;
            
            // Start the process
            publisher.StartProcess();
            
            // Unsubscribe from the event
            publisher.ProcessCompleted -= subscriber.OnProcessCompleted;
        }
    }
    

    In this example, when publisher.StartProcess() is called, it will eventually trigger the ProcessCompleted event, which calls subscriber.OnProcessCompleted() to handle the event.

    Best Practices for Event Handling

    • Avoid Memory Leaks: Always unsubscribe from events when subscribers are no longer needed to prevent memory leaks.
    • Use Event Args: For greater flexibility, use the EventArgs class or a subclass to pass event data.
    • Thread Safety: Be cautious of thread safety when events are likely to be raised from multiple threads.
    • Exception Handling: Consider implementing robust exception handling within event handlers to ensure that one handler's failure doesn't prevent others from executing.

    Conclusion

    Event handling in C# is a powerful feature that allows developers to write clean, maintainable, and decoupled code. By following the outlined steps and best practices, you can effectively implement event-driven programming in your C# applications, enhancing their responsiveness and modularity.

     

     


     

    Author Information
    • Author: Ehsan Babaei

    Send Comment



    Comments