Ich lerne über C# -Ereignisse in der Buch Illustrierten C# 2010 von Daniel M. Solis und probiere das Beispiel über Ereignisse in VS 2010 aus. Aus irgendeinem Grund bekomme ich die Ereignisnachricht zweimal, aber für das Leben von mir kann nicht herausfinden, warum. Hier ist der Code:Warum passiert dieses Ereignis zweimal?
using System;
using System.Text;
using System.Threading;
namespace ConsoleApplication3
{
internal class MyTimerClass
{
public event EventHandler<MyTCEventArgs> Elapsed;
public void OnOneSecond(object source, EventArgs args)
{
if (Elapsed != null)
{
MyTCEventArgs mtcea = new MyTCEventArgs("Message from OnOneSecond");
Elapsed(source, mtcea);
}
}
//-----------------
private System.Timers.Timer MyPrivateTimer;
public MyTimerClass()
{
MyPrivateTimer = new System.Timers.Timer();
MyPrivateTimer.Elapsed += OnOneSecond;
MyPrivateTimer.Interval = 1000;
MyPrivateTimer.Enabled = true;
}
}
internal class ClassA
{
public void TimerHandlerA(object source, MyTCEventArgs args)
{
Console.WriteLine("Class A Message: {0}", args.Message);
}
}
internal class ClassB
{
public static void TimerHandlerB(object source, MyTCEventArgs args)
{
Console.WriteLine("Class B Message: {0}", args.Message);
}
}
internal class MyTCEventArgs : EventArgs
{
public string Message;
public MyTCEventArgs(string s)
{
Message = s;
}
}
internal class Program
{
private static void Main(string[] args)
{
ClassA ca = new ClassA();
MyTimerClass mc = new MyTimerClass();
mc.Elapsed += new EventHandler<MyTCEventArgs>(ca.TimerHandlerA);
mc.Elapsed += new EventHandler<MyTCEventArgs>(ClassB.TimerHandlerB);
Thread.Sleep(2250);
}
}
}
Das Ergebnis ist die folgende Meldung: Klasse A Nachricht: Nachricht von OnOneSecond Klasse B Nachricht: Nachricht von OnOneSecond Klasse A Nachricht: Nachricht von OnOneSecond Klasse B Nachricht: Nachricht von OnOneSecond
Warum passiert es zweimal? Auch davon getrennt, wenn ich die Thread.Sleep-Zeile entferne passiert überhaupt nichts. Das verwirrt mich auch.
Das macht Sinn. Vielen Dank. Ich habe nicht einmal daran gedacht, dass mein Event eine Sekunde dauert, um tatsächlich aufgezogen zu werden. – JeramyRR