using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace EventSamle
{public class AlarmEventArgs : System.EventArgs//事件参数{private  bool _snoozPresed;//懒惰键private int _nrings;//响了几次public bool SnoozPressed{get { return _snoozPresed; }set { _snoozPresed = value; }}public int NumRings{get { return _nrings; }set { _nrings = value; }}public string AlarmText//提醒{get{if (SnoozPressed)return ("Wake up!!! snooze time is over.");elsereturn ("Wake up!!!");}}public AlarmEventArgs(bool snooz, int nrings){this._snoozPresed = snooz;this._nrings = nrings;}}public delegate void AlarmEventHander(object sender, AlarmEventArgs e);//1.声明委托事件处理函数,其实是个类public class AlarmClock//产生事件的类{private bool _snoozPressed = false;private int _nrings = 0;private bool _stop = false;public bool Stop//是否停止。事件类的域,这个例子中事件处理函数会反馈修改这个域的值{get { return _stop; }set { _stop = value; }}public bool SnoozPressed//是否懒惰。事件类的域,这个例子中事件处理函数会反馈修改这个域的值{get { return _snoozPressed; }set { _snoozPressed = value; }}public event AlarmEventHander Alarm;//2.声明一个事件,或叫做产生一个委托事件处理函数的实例protected virtual void OnAlarm(AlarmEventArgs e)//3.触发事件的函数,protected{if (Alarm != null)//一定要加!{Alarm(this, e);}}public void Start()//调用这个函数后开始触发事件,传入参数{for (; ; ){_nrings++;if (Stop)break;else if (SnoozPressed){System.Threading.Thread.Sleep(1000);AlarmEventArgs e = new AlarmEventArgs(SnoozPressed, _nrings);OnAlarm(e);}else{System.Threading.Thread.Sleep(300);AlarmEventArgs e = new AlarmEventArgs(SnoozPressed, _nrings);OnAlarm(e);}}}}public class WakeUp//处理事件的类{public void RingRang(object sender, AlarmEventArgs e)//4.处理事件的函数,同delegate签名一样{Console.WriteLine(e.AlarmText+"\n");if(!e.SnoozPressed){Console.WriteLine(" Let alarm ring? Enter Y");Console.WriteLine(" Stop Alarm? Enter Q");Console.WriteLine(" Press Snooze? Enter N");string input = Console.ReadLine();if(input.Equals("Y")||input.Equals("y")) return;else  if(input.Equals("Q")||input.Equals("q")) {((AlarmClock)sender).Stop = true;//这个例子中可以向发送者反馈信息return;}else{((AlarmClock)sender).SnoozPressed = true;return;}}else {Console.WriteLine(" Let alarm ring? Enter Y");Console.WriteLine(" Stop Alarm? Enter Q");string input = Console.ReadLine();if(input.Equals("Y")||input.Equals("y")) return;if(input.Equals("Q")||input.Equals("q")) {((AlarmClock)sender).Stop = true;return;}}}}public class AlarmDriver//测试类{  public static void Main (string[] args){  // Instantiates the event receiver.WakeUp w= new WakeUp();// Instantiates the event source.AlarmClock clock = new AlarmClock();// Wires the AlarmRang method to the Alarm event.clock.Alarm += new AlarmEventHander(w.RingRang);//把事件处理函数注册到事件处理队列中clock.Start();}}   }

转载于:https://www.cnblogs.com/fengxuewo/archive/2011/09/28/2194728.html

msdn 上的关于delegate和event的一个例子,理解后加点评论相关推荐

  1. 教你在Linux上使用ansible写“剧本”,定义一个“剧本”模板后,让控制集群自动执行我们剧本中所写的“剧情”,几个自动化运维的简单实例

    目录 1.loop的使用 2.使用when,当条件成立时才执行任务 3.notify和handler的使用 4.tags使用 5.处理任务失败 6. 构建一个jinja2模板 7.forks和seri ...

  2. C#中的delegate和event (转)

    C#中的delegate和event 在基于Windows平台的程序设计中,事件(event)是一个很重要的概念.因为在几乎所有的Windows应用程序中,都会涉及大量的异步调用,比如响应点击按钮.处 ...

  3. C#中的delegate和event作用及区别

    Delegate delegate是C#中很重要的语法. 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用. 声明了delegate的属性都会继承自Delegate类. 使用单播委托类 ...

  4. C# delegate and event

    真是的,这个东西看了不用,一段时间后就忘了. delegate相当于函数指针,可以把其他函数加入到delegate实体中,这样用调用delegate实体来实现对所加入函数的调用. 比如 public ...

  5. C# 观察者模式 以及 delegate 和 event

    观察者模式 这里面综合了几本书的资料. 需求 有这么个项目: 需求是这样的: 一个气象站, 有三个传感器(温度, 湿度, 气压), 有一个WeatherData对象, 它能从气象站获得这三个数据. 还 ...

  6. 委托和事件[delegate and event]_C#

    委托和事件: 1. 委托:一个能够表示方法的数据类型:它将方法作为对象封装起来,允许在运行时间接地绑定一个方法调用. 2. 声明委托数据类型: public delegate  bool Greate ...

  7. MSDN上的异步socket 服务端例子

    MSDN上的异步socket 服务端例子 2006-11-22 17:12:01|  分类: 代码学习 |  标签: |字号大中小 订阅 Imports System Imports System.N ...

  8. c# 带返回值的action_C#知识点讲解之C#delegate、event、Action、EventHandler的使用和区别...

    今天来讲一讲<C#delegate.event.Action.EventHandler的使用和区别> 目录 所以,event应运而生 所以,EventHandler应运而生 所以,Acti ...

  9. delegate和event(转载too)

    从 前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺.但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的 工作进度,以防止他偷懒.但是彼得又不想让老板呆在他 ...

最新文章

  1. Hadoop详解(六):MapReduce计算框架详解
  2. 网络编程3之TCP/IP协议
  3. Java中同时输入字符串和int类型出错的处理方式
  4. FinanceJson
  5. 【数据分析】线性回归与逻辑回归
  6. Linux内核分析 - 网络
  7. C++ 查看输入流中的下一个字符
  8. 2015年5月移动游戏Benchmark
  9. QQ音乐无损歌曲分析教程
  10. 如何用python做计算_如何用Python做些基本的数学运算
  11. msxml3.dll 错误'800c0005' 系统未找到指定的资源错误
  12. poj2706 connect
  13. 整理: 显示面板行业英文简称解析
  14. SpringBoot项目启动 错误: 找不到或无法加载主类 com.abc.demo.DemoApplication
  15. 基于winform的打印标签模板设计器以及打印辅助类
  16. Linux怎样低格移动硬盘,移动硬盘低级格式化操作方法详细步骤【图文详解】
  17. windows:Python + Vscode 安装文档
  18. matlab 三维 作图 坐标轴_Matlab编辑三维图坐标的方法
  19. 利用jieba分词分析小说二
  20. Zebra条码打印机的使用

热门文章

  1. 方糖全栈课 PHP React大系,方糖全栈课·PHP+React大系
  2. android 保存文件到本地可见_android 日记log保存到本地简单方法
  3. php 位运算与权限,PHP巧妙利用位运算实现网站权限管理的方法
  4. python退出函数_python 退出程序的方式
  5. mysql grant all详解_MySQL grant 语法的详细解析
  6. sqlite php 函数大全,SQLite 表达式
  7. python只能运行一次怎么改_是否可以修改和运行部分Python程序而无需一次又一次地运行所有这些程序?...
  8. linux透明大页内存,Linux如何禁用透明大页
  9. 【FPGA】ODDR使用研究记录
  10. 如何使用RS-232发射器和接收器?