事件和委托示例
1、Timer的Elapsed事件using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Timers;namespace Timer的Elapsed事件{class Program{static void t
·
1、Timer的Elapsed事件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace Timer的Elapsed事件
{
class Program
{
static void timer_Elased(Object sender,ElapsedEventArgs e)
{
Console.Clear();
Console.WriteLine();
Console.Write(" {0}", e.SignalTime.ToLongTimeString());
}
static void Main(string[] args)
{
Console.Title = "Timer的Elapsed事件应用示例";
Console.BackgroundColor = ConsoleColor.White;
Console.ForegroundColor = ConsoleColor.DarkBlue;
Console.Clear();
Timer timer = new Timer(1000);
timer.Elapsed += new ElapsedEventHandler(timer_Elased);
timer.Start();
Console.ReadKey();
}
}
}
2、事件发行者
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 事件发行者
{
public class Publisher
{
private int level;
public Publisher(int x)
{
level = x;
}
public event EventHandler Event1;
private event EventHandler event2;
public event EventHandler Event2
{
add
{
lock (this)
{
if (level > 10)
{
event2 += new EventHandler(value);
}
else
Console.WriteLine("提供的level值太低,未能引发事件Event2!");
}
}
remove
{
lock (this)
{
event2 -= new EventHandler(value);
Console.WriteLine("事件处理程序已从Event2事件的调用列表中移除!");
}
}
}
protected virtual void OnEvent1(EventArgs e)
{
if (Event1 != null) Event1(this, e);
}
protected virtual void OnEvent2(EventArgs e)
{
if (event2 != null) event2(this, e);
}
public void start()
{
EventArgs args = new EventArgs();
this.OnEvent1(args);
this.OnEvent2(args);
}
}
class Program
{
public static void pub_Event1(object sender,EventArgs e)
{
Console.WriteLine("引发事件 Event1……");
}
public static void pub_Event2(object sender,EventArgs e)
{
Console.WriteLine("引发事件Event2……");
}
static void Main(string[] args)
{
Console.Title = "事件发行者示例";
Console.BackgroundColor = ConsoleColor.White;
Console.ForegroundColor = ConsoleColor.DarkBlue;
Console.Clear();
Publisher pub1 = new Publisher(19);
pub1.Event1 += new EventHandler(pub_Event1);
pub1.Event2 += new EventHandler(pub_Event2);
pub1.start();
Console.WriteLine();
Publisher pub2 = new Publisher(3);
pub2.Event1 += new EventHandler(pub_Event1);
pub2.Event2 += new EventHandler(pub_Event2);
pub2.start();
Console.WriteLine();
pub2.Event1 -= new EventHandler(pub_Event1);
pub2.Event2 -= new EventHandler(pub_Event2);
pub2.start();
Console.WriteLine();
}
}
}
3、特定事件处理
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 特定事件处理
{
public class FireEventArgs:EventArgs
{
public string room;
public int ferocity;
public FireEventArgs(string room,int ferocity)
{
this.room = room;
this.ferocity = ferocity;
}
}
public class FireAlarm
{
public delegate void FireEventHandler(Object sender, FireEventArgs e);
public event FireEventHandler FireEvent;
public void OnFire(string room,int ferocity)
{
if(FireEvent!=null)
{
FireEventArgs e = new FireEventArgs(room, ferocity);
FireEvent(this, e);
}
}
}
class FireHandlerClass
{
public FireHandlerClass(FireAlarm fireAlarm)
{
fireAlarm.FireEvent += ExtinguishFire;
}
void ExtinguishFire(Object sender,FireEventArgs e)
{
Console.WriteLine("\n发生FireEvent事件:");
Console.WriteLine(" 由{0}调用ExtinguishFire方法", sender.ToString());
if (e.ferocity < 2)
{
Console.WriteLine(" {0}里的火无大碍,我用水把它浇灭", e.room);
}
else if (e.ferocity < 5)
Console.WriteLine("我用灭火器把{0}里的火扑灭", e.room);
else
Console.WriteLine(" {0}里的火失去控制了,我给消防队打电话", e.room);
}
}
class Program
{
static void Main(string[] args)
{
Console.Title = "特定事件处理示例";
Console.BackgroundColor = ConsoleColor.White;
Console.ForegroundColor = ConsoleColor.DarkBlue;
Console.Clear();
FireAlarm myFireAlarm = new FireAlarm();
FireHandlerClass myFireHandlerClass = new FireHandlerClass(myFireAlarm);
myFireAlarm.OnFire("厨房",3);
myFireAlarm.OnFire("书房", 1);
myFireAlarm.OnFire("走廊", 5);
}
}
}
4、自定义事件类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 自定义事件类
{
class Program
{
static void Main(string[] args)
{
Console.Title = "自定义事件类";
Console.BackgroundColor = ConsoleColor.White;
Console.ForegroundColor = ConsoleColor.Red;
Console.Clear();
ConsoleKeyInfo cki;
//当Console.TreatControlCAsInput属性为false时,Ctrl+C被处理为一个中断,而不是输入
Console.TreatControlCAsInput = false;
Console.CancelKeyPress += new ConsoleCancelEventHandler(MyHandler);
while(true)
{
Console.WriteLine("请按任意键或按ESC键退出、或按Ctrl+C组合键中断读操作");
cki = Console.ReadKey(true);
Console.WriteLine("您按下了{0}键\n", cki.Key);
if(cki.Key==ConsoleKey.Escape) break;
}
}
protected static void MyHandler(Object sender,ConsoleCancelEventArgs e)
{
Console.WriteLine("\n事件处理程序执行结果如下:");
Console.WriteLine("控制台读操作已被中断");
Console.WriteLine(" 您按下了{0}键", e.SpecialKey);
Console.WriteLine("Cancel属性值为{0}", e.Cancel);
Console.WriteLine("设置Cancle属性为true……");
e.Cancel = true;
Console.WriteLine(" Cancel属性值已被设置为{0}", e.Cancel);
Console.WriteLine("控制台读操作现已恢复……");
}
}
}
5、自定义事件示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 自定义事件示例
{
public class FireAlarm
{
public event EventHandler FireEvent;
public void OnFireEvent()
{
EventArgs e = new EventArgs();
if(FireEvent!=null)
{
FireEvent(this, e);
}
}
}
public class FireHanldlerClass
{
/*public FireHanldlerClass(FireAlarm fireAlarm)
{
fireAlarm.FireEvent += new EventHandler(ExtinguishFire);
}*/
public void ExtinguishFire(Object sender,EventArgs e)
{
Console.WriteLine("\n 发生FireEvent事件:");
Console.WriteLine(" ExtinguishFire方法由{0}调用……", sender.ToString());
Console.WriteLine(" 着火了,赶快来救火啦………………\n");
}
}
class Program
{
static void Main(string[] args)
{
Console.Title = "自定义事件处理程序示例";
Console.BackgroundColor = ConsoleColor.White;
Console.ForegroundColor = ConsoleColor.DarkBlue;
Console.Clear();
FireAlarm myFireAlarm = new FireAlarm();
FireHanldlerClass myFireHandler = new FireHanldlerClass();
myFireAlarm.FireEvent += myFireHandler.ExtinguishFire;
myFireAlarm.OnFireEvent();
}
}
}
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)