c#如何创建一个发布事件的单例订阅的类



目标:使用单例发布事件,并允许任何类订阅/监听这些事件

问题:我不知道怎么做这个。下面的代码是非法的,但它提供了我想要做的

TransmitManager Class - Publisher

    //Singleton
    public sealed class TransmitManager
    {
        delegate void TransmitManagerEventHandler(object sender);
        public static event TransmitManagerEventHandler OnTrafficSendingActive;
        public static event TransmitManagerEventHandler OnTrafficSendingInactive;
        private static TransmitManager instance = new TransmitManager();

        //Singleton
        private TransmitManager()
        {
        }
        public static TransmitManager getInstance()
        {
            return instance;
        }
        public void Send()
        {
           //Invoke Event
           if (OnTrafficSendingActive != null)
              OnTrafficSendingActive(this);
          //Code connects & sends data
          //Invoke idle event
          if (OnTrafficSendingInactive != null)
            OnTrafficSendingInactive(this);
       }
   }

测试类-事件订阅器

   public class Test
   {
     TrasnmitManager tm = TransmitManager.getInstance();
     public Test()
     {
        //I can't do this below. What should my access level be to able to do this??
        tm.OnTrafficSendingActive += new TransmitManagerEventHandler(sendActiveMethod);
     }
     public void sendActiveMethod(object sender)
     {
        //do stuff to notify Test class a "send" event happend
     }
  }

您不需要将事件设置为static

public event TransmitManagerEventHandler OnTrafficSendingActive;
public event TransmitManagerEventHandler OnTrafficSendingInactive;

事件要么是实例成员,要么是静态的。

TransmitManager.OnTrafficSendingActive +=...

public event TransmitManagerEventHandler OnTrafficSendingActive;
...
TransmitManager.Instance.OnTrafficSendingActive+=...

也:使用eventandler作为你的事件委托。考虑创建一个自定义arguments类,并将状态传递给一个事件,而不是多个事件。这将允许您传递状态消息。

相关内容

  • 没有找到相关文章

最新更新