This class contains no event data; it is used by events that do not pass state information to an event handler when an event is raised. If the event handler requires state information, the application must derive a class from this class to hold the data.

using System;
using System.Windows.Controls;
// FireEventArgs: a custom event inherited from EventArgs.publicclass FireEventArgs : EventArgs
{
public FireEventArgs(string room, int ferocity)
{
this.room = room;
this.ferocity = ferocity;
}
// The fire event will have two pieces of information--// 1) Where the fire is, and 2) how "ferocious" it is.publicstring room;
publicint ferocity;
}
// Class with a function that creates the eventargs and initiates the eventpublicclass FireAlarm
{
// Events are handled with delegates, so we must establish a FireEventHandler// as a delegate:publicdelegatevoid FireEventHandler(object sender, FireEventArgs fe);
// Now, create a public event "FireEvent" whose type is our FireEventHandler delegate.publicevent FireEventHandler FireEvent;
// This will be the starting point of our event-- it will create FireEventArgs,// and then raise the event, passing FireEventArgs.publicvoid ActivateFireAlarm(string room, int ferocity)
{
FireEventArgs fireArgs = new FireEventArgs(room, ferocity);
// Now, raise the event by invoking the delegate. Pass in// the object that initated the event (this) as well as FireEventArgs.// The call must match the signature of FireEventHandler.
FireEvent(this, fireArgs);
}
}
// Class which handles the eventclass FireHandlerClass
{
privatestatic TextBlock _textblock;
// Create a FireAlarm to handle and raise the fire events.public FireHandlerClass(FireAlarm fireAlarm, TextBlock outputBlock)
{
// Add a delegate containing the ExtinguishFire function to the class'// event so that when FireAlarm is raised, it will subsequently execute// ExtinguishFire.
fireAlarm.FireEvent += new FireAlarm.FireEventHandler(ExtinguishFire);
FireHandlerClass._textblock = outputBlock;
}
// This is the function to be executed when a fire event is raised.void ExtinguishFire(object sender, FireEventArgs fe)
{
_textblock.Text += String.Format("\nThe ExtinguishFire function was called by {0}.", sender.ToString()) + "\n";
// Now, act in response to the event.if (fe.ferocity < 2)
_textblock.Text += String.Format("This fire in the {0} is no problem. I'm going to pour some water on it.", fe.room) + "\n";
elseif (fe.ferocity < 5)
_textblock.Text += String.Format("I'm using FireExtinguisher to put out the fire in the {0}.", fe.room) + "\n";
else
_textblock.Text += String.Format("The fire in the {0} is out of control. I'm calling the fire department!", fe.room) + "\n";
}
}
publicclass Example
{
publicstaticvoid Demo(System.Windows.Controls.TextBlock outputBlock)
{
// Create an instance of the class that will be firing an event.
FireAlarm myFireAlarm = new FireAlarm();
// Create an instance of the class that will be handling the event. Note that// it receives the class that will fire the event as a parameter.
FireHandlerClass myFireHandler = new FireHandlerClass(myFireAlarm, outputBlock);
//use our class to raise a few events and watch them get handled
myFireAlarm.ActivateFireAlarm("Kitchen", 3);
myFireAlarm.ActivateFireAlarm("Study", 1);
myFireAlarm.ActivateFireAlarm("Porch", 5);
return;
}
}