You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.5 KiB
C#

9 months ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace POSV.MessageEvent
{
/// <summary>
/// 消息事件提供者
/// </summary>
public class MsgEventProvider
{
private string eventType = string.Empty;
public List<MsgReceiver> Receivers;
public MsgEventProvider(string _eventType)
{
eventType = _eventType;
Receivers = new List<MsgReceiver>();
}
~MsgEventProvider()
{
//Console.WriteLine(string.Format("{0}的MsgEventProvider析构函数执行", eventType));
}
public string EventType
{
get { return eventType; }
}
private event EventHandler<MsgEventArgs> appEventHandler;
public event EventHandler<MsgEventArgs> AppEventHandler
{
add
{
appEventHandler += value;
}
remove
{
appEventHandler -= value;
}
}
#region 外部调用事件
public void Run(Object sender , MsgEventArgs args)
{
if (appEventHandler != null)
{
appEventHandler(sender , args);
}
#region 去除那些只绑定一次处理事件的对象
for (int i = 0; i < Receivers.Count; i++)
{
try
{
MsgReceiver item = Receivers[i];
if (item == null) continue;
if (item.IsOnce)
{
AppEventHandler -= item.appEventHandler;
Receivers.Remove(item);
}
}
catch
{
Console.WriteLine("去除接受者对象列表中内容错误!");
}
}
#endregion
}
public void AddListener(MsgReceiver receiver)
{
Receivers.Add(receiver);
AppEventHandler += receiver.appEventHandler;
}
public void RemoveListener(MsgReceiver receiver)
{
for (int i = 0; i < Receivers.Count; i++)
{
MsgReceiver item = Receivers[i];
if (item.ReceiverObj == receiver.ReceiverObj)
{
AppEventHandler -= item.appEventHandler;
Receivers.Remove(item);
return;
}
}
}
#endregion
}
}