Ch13 Exercise Question
in the Answers to Ch13 Exercise it states the following:
"Note that you need this extra ProcessElapsedEvent() method, as the
ElapsedEventHandler delegate can't be cast to an EventHandler delegate. You don't need to do this for your MessageHandler delegate since it has a syntax identical to EventHandler:"
But when I try this excercise I don't have any problems using ProcessEvent Eventhandler for both types of events. How come? My code in Connection.cs is as follows:
#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
using System.Timers;
#endregion
namespace Ch12Ex03
{
public delegate void MessageHandler(object source,
EventArgs e);
public class Connection
{
public event MessageHandler MessageArrived;
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
private Timer pollTimer;
public Connection()
{
pollTimer = new Timer(100);
pollTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);
pollTimer.Elapsed += new ElapsedEventHandler(ProcessEvent);
}
public void Connect()
{
pollTimer.Start();
}
public void Disconnect()
{
pollTimer.Stop();
}
private static Random random = new Random();
private void CheckForMessage(object source, ElapsedEventArgs e)
{
Console.WriteLine("Checking for new messages.");
if ((random.Next(9) == 0) && (MessageArrived != null))
{
ProcessEvent(this, new MessageArrivedEventArgs("Hello Mum!"));
}
}
// New Handler
public void ProcessEvent(object source, EventArgs e)
{
if (e is MessageArrivedEventArgs)
{
Console.WriteLine("Connection.MessageArrived event received.");
Console.WriteLine("Message: {0}",
(e as MessageArrivedEventArgs).Message);
}
if (e is ElapsedEventArgs)
{
Console.WriteLine("Timer.Elapsed event received.");
Console.WriteLine("SignalTime: {0}",
(e as ElapsedEventArgs).SignalTime);
}
}
}
}
|