How to: Raise and Consume Events
8898 ワード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Counter counter = new Counter(new Random().Next(10));
// 4. subscribe event
counter.ThresholdReached += counter_ThresholdReached;
Console.WriteLine("press 'a' key to increase total");
while (Console.ReadKey(true).KeyChar == 'a')
{
Console.WriteLine("adding one");
counter.Add(1);
}
}
static void counter_ThresholdReached(object sender, ThresholdEventArgs e)
{
Console.WriteLine("Threshold " + e.ThresholdNum + " reached at time "+ e.TimeReached);
}
}
public class Counter
{
int threshold;
int total;
public Counter(int thresholdVal)
{
threshold = thresholdVal;
}
public void Add(int x)
{
total += x;
// 5. trigger event
if (total > threshold)
{
ThresholdEventArgs args = new ThresholdEventArgs();
args.ThresholdNum = threshold;
args.TimeReached = DateTime.Now;
OnThresholdReached(this, args);
}
}
// 1. define event
public event EventHandler<ThresholdEventArgs> ThresholdReached;
// 2. define OnXXX virtual method
public virtual void OnThresholdReached(object sender, ThresholdEventArgs e)
{
EventHandler<ThresholdEventArgs> handler = ThresholdReached;
if (handler != null)
handler(this, e);
}
}
// 3. define event arguments
public class ThresholdEventArgs : EventArgs
{
public int ThresholdNum { get; set; }
public DateTime TimeReached { get; set; }
}
}