--------------------------------------------------------------类(包含有事件)的定义
/// <summary>
/// 开始事件
/// </summary>
public class StartEventArgs:EventArgs
{
private int total;
private string str_msg;
public int Totla
{
get
{
return this.total;
}
set
{
this.total=value;
}
}
public string Str_msg
{
get
{
return str_msg;
}
set
{
this.str_msg=value;
}
}
public StartEventArgs(int total,string str_msg)
{
this.total=total;
this.str_msg=str_msg;
}
}
public delegate void StartEventHandler(object sender,StartEventArgs e);
public event StartEventHandler StartWork;
protected virtual void OnStarWork(StartEventArgs e)
{
if(StartWork!=null)
{
StartWork(this,e);
}
}
/// <summary>
/// 批量从***添加数据库(考勤数据)
/// </summary>
public void DBSetLogList()
{
int i=0;
ArrayList list=GetGeneralLogData();
foreach(GeneralData g in list)
{
i+=1;
StartEventArgs args1=new StartEventArgs(i,"当前第"+i.ToString()+"条数据添加到数据库...");//实例化参数
OnStar(args1);//向外部发出通知
DBSetGereralData(g);
}
StartEventArgs args2=new StartEventArgs(i,"考勤数据回收完成!");
OnStar(args2);
}
---------------------------------------------------事件与处理程序的挂接
/// <summary>
/// 批量从考勤机添加数据库(考勤数据)
/// </summary>
public void DBSetLogList()
{
DataAccess.GeneralDataDA da=new DataAccess.GeneralDataDA(this.finger,this.iMachinaNum);
da.Start+=new FingerClass.DataAccess.GeneralDataDA.StartEventHandler(da_Start);
da.DBSetLogList();
}
------------------------------------------------------------------事件处理程序
private void da_Start(object sender, FingerClass.DataAccess.GeneralDataDA.StartEventArgs e)
{
StartEventArgs args=new StartEventArgs(e.Totla,e.Str_msg);//实例化参数
OnStar(args);//向外部发出通知
}
.NET Framework 类库设计指南中的约定:
(1)事件委托名称应以 EventHandler 为结尾;
(2)事件委托的“规格”应该是两个参数:第一个参数是 object 类型的 sender,代表发出事件通知的对象(代码中一般是 this 关键字(VB.NET 中是 Me))。第二个参数 e,应该是 EventArgs 类型或者从 EventArgs 继承而来的类型;
事件参数类型,应从 EventArgs 继承,名称应以 EventArgs 结尾。应该将所有想通过事件、传达到外界的信息,放在事件参数 e 中。
(3)一般的,只要类不是密封(C# 中的 sealed,VB.NET 中的 NotInheritable)的,或者说此类可被继承,应该为每个事件提供一个 protected 并且是可重写(C# 用 virtual,VB.NET 用
对于此类的子类,如果要改变发生此事件时的行为,应重写 OnXxxx 方法;并且在重写时,一般情况下应调用基类的此方法(C# 里的 base.OnXxxx,VB.NET 用 MyBase.OnXxxx)。