示例#1
0
        /// <summary>
        /// Adds an event handler delegate.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="handler"></param>
        public void AddEventDelegate(string type, EventHandlerDelegate handler)
        {
            Contract.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(type));
            Contract.Requires<ArgumentNullException>(handler != null);

            AddEventDelegate(type, handler, false);
        }
        /// <summary>
        /// Register an event handler.
        /// </summary>
        /// <param name="eventType">
        /// The <see cref="System.Object"/> type of event to register the listener for.
        /// This value may not be null.
        /// </param>
        /// <param name="eventHandler">
        /// The <see cref="EventHandlerDelegate"/> delegate, to call, whenever the given event happens.
        /// This value may not be null.
        /// </param>
        public void RegisterListener(object eventType, EventHandlerDelegate eventHandler)
        {
            EventHandlerDelegate handler;
            if (this.handlers.TryGetValue(eventType, out handler))
            {
                // Remove the handler first, before adding it again. This prevents the
                // handler from being registered twice in the multi-cast delegate.
                handler -= eventHandler;
                handler += eventHandler;

                // Don't forget to re-assign the handler to, as delegates have overloaded
                // + and - operators, making them essentially behave like immutable objects.
                // They may also change state from being a Delegate object to becoming a
                // MulticastDelegate thingy, which requires those overloads.
                this.handlers[eventType] = handler;
            }
            else
            {
                // The event type does not have a handler yet, add a new entry
                // to the dictionary for the given event type.
                handler = eventHandler;
                this.handlers.Add(eventType, handler);
            }
        }
示例#3
0
        /// <summary>
        /// Adds an event handler delegate.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="handler"></param>
        /// <param name="capture"></param>
        public void AddEventDelegate(string type, EventHandlerDelegate handler, bool capture)
        {
            Contract.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(type));
            Contract.Requires<ArgumentNullException>(handler != null);

            Register(type, new ActionEventListener(_ => handler(_)), capture);
        }
 /// <summary>
 /// Remove a previously registered event handler from handling the given type of event.
 /// Should the handler not be registered for the given event, the call is ignored.
 /// </summary>
 /// <param name="eventType">
 /// The <see cref="System.Object"/> type of event to remove  the listener for.
 /// This value may not be null.
 /// </param>
 /// <param name="eventHandler">
 /// The <see cref="EventHandlerDelegate"/> delegate, to call, whenever the given event happens.
 /// This value may not be null.
 /// </param>
 public void RemoveListener(object eventType, EventHandlerDelegate eventHandler)
 {
     EventHandlerDelegate handler;
     if (this.handlers.TryGetValue(eventType, out handler))
     {
         // Remove the specified handler from the multi-cast delegate.
         handler -= eventHandler;
     }
 }
示例#5
0
 public void AddListener <T>(EventHandlerDelegate <T> handler, EventDispatcher.Priority priority = EventDispatcher.Priority.DEFAULT) where T : struct
 {
     eventDispatcher.AddListener(handler, priority);
 }
 public DebuggingEventHandler(Game1 game)
 {
     Pause += new EventHandlerDelegate(game.PauseGame);
 }