私はダニエル・M.ソリスによってブックイラストのC#2010でのC#のイベントについて学んだし、私は二回のイベントメッセージを取得するいくつかの理由が、私の人生のためにVS 2010でのイベントについて与えられた例をしようとしています理由を理解できません。ここでは、コードは次のとおりこのイベントはなぜ2回起こりますか?
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);
}
}
}
結果は次のメッセージである。 クラスメッセージ:OnOneSecond クラスBメッセージからのメッセージ:OnOneSecond クラスからのメッセージのメッセージ:OnOneSecond クラスBメッセージからのメッセージ:メッセージ
OnOneSecondなぜそれが二度起こるのでしょうか?それと別に、Thread.Sleep行を削除すると、何も起こりません。これも私を混乱させる。
。ありがとうございました。私は実際に起こるために1秒かかる私の出来事について考えることさえしなかった。 – JeramyRR