Skip to main content

Events in .NET

Events
A class defines an event member to notify other objects
For example, when a Button object is clicked, a Form object receives a notification and performs some action.
The CLR’s event model is based on delegates

Event member

An event member declaration provides the class with three capabilities
Objects can register for the event
Objects can unregister the event
The type that defines the event maintain the set of registered objects and notifies these objects when the event is raised.
public event AlarmMessageEventhandler AlarmMessage when viewed in ILDASM, notice that compiler translates the above line to following three constructs private AlarmMessageEventhandler, add_AlarmMessage, remove_AlarmMessage.

BurglarSystemManager.cs

namespace Event_Demo
{
    /// <summary>
    /// I have declared a class named BurglarSystemManager
    /// </summary>
    class BurglarSystemManager
    {
        /// <summary>
        /// We have defined a type that holds additional information to be sent via the event notification
        /// Notice that the BurglarAlarmMsgEventArgs inherits from EventArgs. The EventArgs is defined iin the
        /// .NET Framework class library
        /// </summary>
        public class BurglarAlarmMsgEventArgs:EventArgs
        {
            public readonly string AlarmMessage, AlarmMessageDescription;
            public BurglarAlarmMsgEventArgs(string Message, string MsgDescription)
            {
                this.AlarmMessage = Message;
                this.AlarmMessageDescription = MsgDescription;
            }
        }
        // The next step is to define the prototype of the call back method or delegate that the receivers
        //has to impliment
        public delegate void AlarmMessageEventHandler(object sender, BurglarAlarmMsgEventArgs eventArgs);
        // Declare the event member
        public event AlarmMessageEventHandler BurglarAlarmMsg;
        // Define a protected, virtual method for notifying the registered objects about the events.
        protected virtual void OnAlarmMessage(BurglarAlarmMsgEventArgs msgEventArgs)
        {
            // Check if any object has registered for event message
            if(BurglarAlarmMsg != null)
            {
                //Notify all the objects in the delegate linked list
                BurglarAlarmMsg(this, msgEventArgs);
            }
        }
        // Write a method that will handle the message raised by the burglar alarm system
        public void HandleAlarmMessagefromSystem(string msg, string desc)
        {
            BurglarAlarmMsgEventArgs obj = new BurglarAlarmMsgEventArgs(msg, desc);
            //Call the virtual method notifying that the alarm from system arrived. Raise the event to notify
            // all the intrested listners
            OnAlarmMessage(obj);
        }
    }
}

Form1.cs

namespace Event_Demo
{
    /// <summary>
    /// Now lets design a type that listens for the alarm event raised
    /// </summary>
    public partial class Form1 : Form
    {
        BurglarSystemManager bsm = new BurglarSystemManager();
        public Form1()
        {
            InitializeComponent();
        }
        private void Button1_Click(object sender, EventArgs e)
        {
            // Constrcut a instance of alarmmsgeventhandler
            bsm.BurglarAlarmMsg += new BurglarSystemManager.AlarmMessageEventHandler(AlarmMessage);
        }
        //Lets write the call back methid that the BurglarAlarmManager will call to
        //Notify the alarm system that a new alarm message has been raised   
        private void AlarmMessage(object sender, BurglarSystemManager.BurglarAlarmMsgEventArgs args)
        {
            MessageBox.Show("Alarm message Arrived with " + args.AlarmMessage + " Desc " + args.AlarmMessageDescription);
        }
        /// <summary>
        /// Unregister the Burglar alarm message event
        /// </summary>
        public void UnregisterEvent()
        {
            bsm.BurglarAlarmMsg -= new BurglarSystemManager.AlarmMessageEventHandler(AlarmMessage);
        }
        private void Button3_Click(object sender, EventArgs e)
        {
            bsm.HandleAlarmMessagefromSystem("Alarm raised at", DateTime.Now.ToString());
        }
    }
}

The demo video is available at
 https://youtu.be/UNanaAZO3Ps

Comments

Popular posts from this blog

Real time data to web application using Microsoft Signal R and Razor Pages

Today we are going to learn how to create razor pages and how to send run time value to the razor page using Signal R Create a new .NET core web application Add Signal R library by,  Add Client-Side Library dialog in the project, for Provider select "unpkg" and select the latest version from the drop down For Library, enter @aspnet/signalr@1, Add a new folder to the project named as Hubs The chat hub class inherits from HUb class that manages connections and messaging The send message is called to send the message to all the clients. MyHub.cs file contains the following code using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR; //using System.Threading.Tasks; namespace SignalRSample.Hubs {     public class MyHub : Hub     {         public async Task SendMessage(string user, string message)         {       ...

CRUD operation with WCF service and WPF client

 The database restored on local server WCF Service is talking to the database. Used Visual Studio 2019, entity framework 6 for data base operations from the service. The service exposes the following API’s.  The WCF contracts has both synchronous and asynchronous API's The client is in WPF. It has three windows, main window, customer window and order window as follows. The client uses the WCF service for database operations. When customer button is clicked, the customer window is displayed as below. We can perform CRUD operation from it. The customer can be searched based on ID. New customer window The order button launched order window. It has combo box to choose the customer ID. On selecting the ID, the order details are displayed in the data grid as follows. The source code is available in the GIT hub, URL below: https://github.com/SwagatikaGoswami/WPF_WCF_CRUD.git

Online Exam App with .NET Core Web API and Blazor Client

 We will develop an app that can host online exam. It will have the feature to register user, allow the user to log in. Dashboard for creating sample tests.  The code is shared in GIT hub repository https://github.com/ SwagatikaGoswami/ OnlineExamApp.git The database is MySQL database. The server is a WEB API .NET Core service that uses entity framework for DB operations. The client is a web assembly blazor application. The password stored in the database is encrypted. Register window is as follows. It checks for the mandatory fields. The log in page is as follows: The admin dashboard after logging in  The admin dashboard when new test button is clicked. It uses a Blazor component for adding new test samples.