佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 995|回复: 0

Event Manager

[复制链接]
发表于 24-10-2008 12:47 AM | 显示全部楼层 |阅读模式
Here is a simple event manager class using .Net delegate and event. Delegation model is a process in which a task is handed over to some other process so as to accomplish it. A manager is assigned a job which could be executed by one of his subordinates. As he knows the exact location of the subordinate, he redirects or delegates the work. Here, manager is the delegate and his subordinate is the method wrapped up with the delegate.

First, create an Interface call IEventManager.

public interface IEventManager
{
    event MyEventHandler eventHandler;
    void fireEvent(object sender, MyEventArgs myEventArgs);
    void performEvent(object sender, MyEventArgs e);
}
Create an Enum class for the event id. Event Id is uses to identify event.

public enum MyEventID
{
      EVENT_TEST1,
      EVENT_TEST2,
      EVENT_TEST3
}
Create a MyEventArgs class which inherit from EventArgs. There are 2 main fields in the class which are a Hashtable and a MyEventId type field. Using Hashtable field rather than a specific type of field has advantage of storing difference type of data in a single hashtable.

public class MyEventArgs : EventArgs
{
   Hashtable _param;
   public Hashtable getParam
   {
      get { return _param; }
      set { _param = value; }
   }
   MyEventID _eventID;
   public MyEventID getEventID
   {
      get { return _eventID; }
      set { _eventID = value; }
   }
   public MyEventArgs(MyEventID eventID, Hashtable param)
   {
      _param = param;
      _eventID = eventID;
   }
  }

Here are the core class, the manager which implemented singleton pattern.

public class MyEventManager : IEventManager
{
   private static MyEventManager _instance;
   public event MyEventHandler eventHandler;
   private static List<IEventManager> listerners = new List<IEventManager>();

   public static MyEventManager Instance
   {
        get { return _instance; }
   }

   //Singleton manager
  static MyEventManager()
  {
      lock (typeof(MyEventManager))
      {
        if (_instance == null)
        {
           _instance = new MyEventManager();
        }
      }
  }
  public MyEventManager()
  {
      eventHandler += new MyEventHandler(performEvent);
  }

  public void fireEvent(object sender, MyEventArgs myEventArgs)
  {
        eventHandler(sender, myEventArgs);
  }

  public void addListener(IEventManager listener)
  {
       listener.eventHandler += new MyEventHandler(listener.performEvent);
       listerners.Add(listener);
  }

public void performEvent(object sender, MyEventArgs e)
{
     for (int i = 0; i < listerners.Count; i++)
     {
       listerners.fireEvent(sender, e);
     }
}
}

Test Class
public
class TestClass1 : IEventManager
{
  #region
IEventManager Members
  public event MyEventHandler eventHandler;
  
public void fireEvent(object sender, MyEventArgs myEventArgs)
  {
      eventHandler(sender, myEventArgs);
  }

  public void performEvent(object sender, MyEventArgs e)
  {
      switch (e.getEventID)
      {
         case MyEventID.EVENT_TEST1:
            Console.WriteLine("Receive event at TestClass1 " +Thread.CurrentThread.ManagedThreadId.ToString());
         break;
      }
   }
   #endregion
}

Test Run
static void Main(string[] args)
{
  TestClass1 t1 = new TestClass1();
  MyEventManager.Instance.addListener(t1);
  MyEventManager.Instance.fireEvent(t1, new MyEventArgs(MyEventID.EVENT_TEST1,  new System.Collections.Hashtable()));
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 27-12-2025 07:47 AM , Processed in 0.123791 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表