C# 中使用事件机制实现线程间的通信。
通过事件使用委托
事件在类中声明且生成,且使用同一个类或其他类中的委托与事件处理程序关联 。
- 发布器
包含事件和委托定义的对象。时间和委托之间的联系也定义在这个对象中,发布器对象调用这个事件,并通知到其他的对象 - 订阅器
是一个接受并且处理事件程序的对象
声明事件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimpleEvent
{
public class EventTest
{
private int m_value;
public delegate void NumManipulationHandler();
public event NumManipulationHandler ChangeNum;
protected virtual void OnNumChanged()
{
if (ChangeNum != null)
{
ChangeNum(); /* 事件被触发 */
}
else
{
Console.WriteLine("event not fire");
Console.ReadKey(); /* 回车继续 */
}
}
public EventTest()
{
int n = 5;
SetValue(n);
}
public void SetValue(int n)
{
if (m_value != n)
{
m_value = n;
OnNumChanged();
}
}
}
public class subscribEvent
{
public void printf()
{
Console.WriteLine("event fire");
Console.ReadKey(); /* 回车继续 */
}
}
/***********触发***********/
public class MainClass
{
public static void Main()
{
EventTest e = new EventTest(); /* 实例化对象,第一次没有触发事件 */
subscribEvent v = new subscribEvent(); /* 实例化对象 */
e.ChangeNum += new EventTest.NumManipulationHandler(v.printf); /* 注册 */
e.SetValue(7);
e.SetValue(11);
}
}
}
输出:
event not fire
event fire
event fire