六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 55|回复: 0

C#事件机制学习笔记

[复制链接]

升级  70%

9

主题

9

主题

9

主题

童生

Rank: 1

积分
35
 楼主| 发表于 2013-1-27 05:11:46 | 显示全部楼层 |阅读模式
C#时间机制学习

事件声明: public event 代理名 事件名;

在C#中,通过使用delegate,可以通过"+="为事件添加一个甚至多个响应方法;"-="来取消这些方法

C#中使用事件的步骤:
1,创建一个委托;
2,将创建的委托与特定的事件相关联;
3,编写事件处理程序;
4,利用编写的事件处理程序生成一个委托实例;
5,把这个委托实例添加到产生事件对象的事件列表中(订阅事件);
6,编写程序来触发事件的产生。

事件实例程序:
捕获键盘输入事件,每次输入一个字符之后再控制台以大写字母的形式输出该字符。
【运行环境:VS2008】

using System;using System.Collections.Generic;using System.Text;namespace StudyEvent2{    class Program    {        static void Main(string[] args)        {            KeyInputMonitor monitor = new KeyInputMonitor();            EventReceiver receiver = new EventReceiver(monitor);            monitor.Run();            //Console.ReadKey();        }    }    internal class KeyEventArgs : EventArgs    {        private char keyChar;        public KeyEventArgs(char keyChar) : base()        {            this.keyChar = keyChar;        }        public char KeyChar        {            get            {                return this.keyChar;            }        }    }    internal class KeyInputMonitor    {        public delegate void KeyDown(object sender, KeyEventArgs e);        public event KeyDown OnKeyDown;        public void Run()        {            bool finished = false;            do            {                Console.WriteLine("Input a char");                string response = Console.ReadLine();                char responseChar = (response == "") ? ' ' : char.ToUpper(response[0]);                switch (responseChar)                {                    case 'X':                        finished = true;                        break;                    default:                        KeyEventArgs keyEventArgs = new KeyEventArgs(responseChar);                        OnKeyDown(this, keyEventArgs);                        break;                }            } while (!finished);        }    }    internal class EventReceiver    {        public EventReceiver(KeyInputMonitor monitor)        {            monitor.OnKeyDown += new KeyInputMonitor.KeyDown(Echo);        }        private void Echo(object sender, KeyEventArgs e)        {            Console.WriteLine("Capture key: {0}", e.KeyChar);        }    }}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表