2

目标:让单例发布事件并允许任何类订阅/收听这些事件

问题:我无法弄清楚如何做到这一点。下面的代码是非法的,但它提供了我正在尝试做的事情

TransmitManager 类 - 发布者

    //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
     }
  }
4

2 回答 2

4

您不需要制作事件static

public event TransmitManagerEventHandler OnTrafficSendingActive;
public event TransmitManagerEventHandler OnTrafficSendingInactive;
于 2013-03-20T14:29:12.230 回答
1

您的事件必须是实例成员,或者您必须将它们作为静态来处理。

TransmitManager.OnTrafficSendingActive +=...

或者

public event TransmitManagerEventHandler OnTrafficSendingActive;

...

TransmitManager.Instance.OnTrafficSendingActive+=...

另外:使用 EventHandler 作为您的事件委托。考虑制作一个自定义参数类并将状态传递给一个事件而不是多个事件。这也可以让您传递状态消息。

于 2013-03-20T14:30:18.370 回答