C#中委托和事件的理解使用
委托和事件的说明:
(1)C#中事件:事件是属于类的成员,所以要放在类的内部。
(2)委托属于一个定义,是和类、接口类似的,通常放在外部。
Preproc.cs
public class Preproc
{
//数据处理事件
EventHandler FirstConnectionEventHandler;
public Preproc()//构造函数
{
//关联事件
FirstConnectionEventHandler = new EventHandler(AddIpToList);
}
//将事件添加到事件队列中
gd.FirstConnectionHandlesEvent += FirstConnectionEventHandler;
//事件处理方法
protected virtual void AddIpToList(object sender, S7ClientEventArgs e)
{
List list1 = (List)e.Data;
TraceData trda = new TraceData();
foreach (TraceData sd in list1)
{
trda.data.IP = sd.data.IP;
trda.data.Rack = sd.data.Rack;
trda.data.Slot = sd.data.Slot;
trda.siemensPLCSelected = sd.siemensPLCSelected;
}
list.Add(trda);
//logger.Info("Sig recv\t\t"+ list.Count.ToString());
}
GatherData.cs
///
/// 一次连接中途断开的处理事件
///
public event EventHandler FirstConnectionHandlesEvent;
protected virtual void FirstConnectionEvent(List<TraceData> pkgList)
{
EventHandler<S7ClientEventArgs> temp = FirstConnectionHandlesEvent;
if (temp != null) temp(this, new S7ClientEventArgs(pkgList));
}
//事件触发
if (!PingIpOrDomainName(sv.Address))
{
TraceData trda = new TraceData();
trda.data.IP = sv.Address;
trda.data.Rack = GetRack;
trda.data.Slot = GetSlot;
trda.siemensPLCSelected = GetsiemensPLCS;
handlerlist.Add(trda);
FirstConnectionEvent(handlerlist);
}