//事件
//与委托 委托的一个实例,前面加event---- 事件
// 委托 (声明 触发) 发布 (注册事件(订阅) 处理事件)订阅者
private void button1_Click(object sender, EventArgs e)
{
Children children = new Children();
//children.CryAction = () => { Console.WriteLine("宝宝哭了!"); };
//children.CryAction += () => { Console.WriteLine("妈妈说别哭了!"); };
//children.CryAction += () => { Console.WriteLine("爸爸也说别哭了!"); };
//children.CryAction += () => { Console.WriteLine("奶奶也说哭了!"); };
//children.CryAction += () => { Console.WriteLine("宝宝笑了!"); };
children.CryActionHandler();
//children.CryAction.Invoke();
//children.CryActionEvent +=()=>{ Console.WriteLine("宝宝哭了!"); };//不能用=运算符
//children.CryActionEvent += () => { Console.WriteLine("妈妈说别哭了!"); };
//children.CryActionEvent += () => { Console.WriteLine("爸爸也说别哭了!"); };
//children.CryActionEvent += () => { Console.WriteLine("奶奶也说哭了!"); };
//children.CryActionEvent += () => { Console.WriteLine("宝宝笑了!"); };
//children.CryEventHandlerEvent();
children.MyCryEventHanlder += (o, ee) =>
{
ee.CryMsg = "妈妈说别哭了!";
Console.WriteLine("{0}",ee.CryMsg);
};
children.MyCryEventHanlder += (o, ee) =>
{
ee.CryMsg = "爸爸也说别哭了!";
Console.WriteLine("{0}", ee.CryMsg);
};
children.MyCryEventHanlder += (o, ee) =>
{
ee.CryMsg = "奶奶也说哭了!";
Console.WriteLine("{0}", ee.CryMsg);
};
children.MyCryEventHanlder += (o, ee) =>
{
ee.CryMsg = "宝宝笑了!";
Console.WriteLine("{0}", ee.CryMsg);
};
children.OnCryEvent("宝宝哭了!");
}
Children.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace WinEvent
{
public class Children
{
public delegate void CryEventHandler();
public CryEventHandler CryAction;
public event CryEventHandler CryActionEvent;//事件的声明 不能在外面Invoke,包括它的子类也不行
public event Action<object, MyEventArgs> MyCryEventHanlder;
public void CryActionHandler()
{
if(CryAction!=null)
{
CryAction.Invoke();
}
}
public void CryEventHandlerEvent()
{
if (CryActionEvent != null)
CryActionEvent.Invoke();
}
private void MyCryEvent(MyEventArgs e)
{
if(MyCryEventHanlder!=null)
{
foreach (Action<object, MyEventArgs> f in MyCryEventHanlder.GetInvocationList())
{
f.Invoke(this, e);
Thread.Sleep(1000);
}
//MyCryEventHanlder.Invoke(this, e);
}
}
public void OnCryEvent(string msg)
{
MyEventArgs e = new MyEventArgs(msg);
if (msg != "")
MyCryEvent(e);
}
}
}
MyEventArgs.cs
public class MyEventArgs:EventArgs
{
public string CryMsg { get; set; }
public MyEventArgs(string msg)
{
this.CryMsg = msg;
}
}