It works when the event is generated once and after receiving a zero, the phrase is displayed: "Zero received - event generation is completed". But if the event is generated twice, the phrase - "Zero received - event generation is completed" is not output.
Task. Create an application where the event generator can generate three different events. Event receivers act as subscribers to the post office and can forward information to each other using the generator as a mailbox. At the same time, they indicate the number (from 1 to 3) of the next receiver and some integer that is transmitted to the receiver. This transmission cycle continues until one of the receivers specifies the number zero as the receiver. In this case, the application shuts down. When the application is started, the first mail notification is always received from the generator by the first receiver. To address and transmit information, use the second argument of the event handler.
using System;
namespace DelegateEvents
{
class Program
{
static int count;
class MyEventArgs : EventArgs
{
int handlernumber;
public int Handlernumber{ get;set; }
int numb;
public int Numb { get; set; }
}
delegate void MyEventHandler(object source, MyEventArgs e);
class GenEvent
{
public event MyEventHandler Event1;
public void OnEvent1()
{
MyEventArgs e = new MyEventArgs();
if (Event1 != null)
{
Random rand = new Random();
e.Numb = rand.Next(1, 8);
e.Handlernumber = 1;
Event1(this, e);
}
}
public event MyEventHandler Event2;
public void OnEvent2()
{
MyEventArgs e = new MyEventArgs();
if (Event2 != null)
{
Random rand = new Random();
e.Handlernumber = 2;
e.Numb = rand.Next(1, 8);
Event2(this, e);
}
}
public event MyEventHandler Event3;
public void OnEvent3()
{
MyEventArgs e = new MyEventArgs();
if (Event3 != null)
{
Random rand = new Random();
e.Handlernumber = 3;
e.Numb = rand.Next(1, 8);
Event3(this, e);
}
}
}
class FirstEventHandler
{
public void Handler1(object source, MyEventArgs e)
{
Random rand = new Random();
Console.WriteLine("Event happend:" + e.Handlernumber+ " Got number:"+ e.Numb+ " Source:" + source);
e.Handlernumber = rand.Next(0,4);
count = e.Handlernumber;
}
}
class SecondEventHandler
{
public void Handler2(object source, MyEventArgs e)
{
Random rand = new Random();
Console.WriteLine("Event happend:" + e.Handlernumber+ " Got number:"+ e.Numb+" Source:" + source);
e.Handlernumber = rand.Next(0, 4);
count = e.Handlernumber;
}
}
class ThirdEventHandler
{
public void Handler3(object source, MyEventArgs e)
{
Random rand = new Random();
Console.WriteLine("Event happend:"+e.Handlernumber + " Got number:" + e.Numb+" Source:" + source);
e.Handlernumber = rand.Next(0, 4);
count = e.Handlernumber;
}
}
static void Main(string[] args)
{
GenEvent genEvent = new GenEvent();
FirstEventHandler firstEventHandler = new FirstEventHandler();
SecondEventHandler secondEventHandler = new SecondEventHandler();
ThirdEventHandler thirdEventHandler = new ThirdEventHandler();
genEvent.Event1 += firstEventHandler.Handler1;
genEvent.Event2 += secondEventHandler.Handler2;
genEvent.Event3 += thirdEventHandler.Handler3;
genEvent.OnEvent1();
if (count == 0)
{ Console.WriteLine("Zero received - event generation is completed"); }
else if(count == 1)
genEvent.OnEvent1();
else if (count == 2)
genEvent.OnEvent2();
else if (count == 3)
genEvent.OnEvent3();
}
}
}
Aucun commentaire:
Enregistrer un commentaire