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をイベントデリゲートとして使用します。カスタム引数クラスを作成し、ステータスを複数のイベントではなく1つのイベントに渡すことを検討してください。これにより、ステータスメッセージも渡すことができます。

于 2013-03-20T14:30:18.370 に答える