首页 > 代码库 > How to: Raise and Consume Events

How to: Raise and Consume Events

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; }    }}