CSharpUtilities::WeakEvent Class Reference


Detailed Description

Maintains a list of event handlers through weak references.

WeakEvent is intended for use as the backing storage for an event. Note that WeakEvents invoke handlers through reflection and so are slower than standard events. A WeakEvent is intended for cases where leaks are especially likely to occur, such as for events published from a singleton object.

Example code for the publishing class:

    class MyClass
    {
       public event EventHandler MyEvent
     {
          add { WeakMyEvent.AddHandler(value) };
          remove { WeakMyEvent.RemoveHandler(value) };
       }

       protected virtual void OnMyEvent(EventArgs e)
       {
          WeakMyEvent.Raise(this, e);
       }

       private readonly WeakEvent WeakMyEvent = new WeakEvent();
    }

Event listeners add and remove themselves from such events as they would for any standard event.

List of all members.

Public Member Functions

void  AddHandler (Delegate handler)
  Add a handler, maintained by weak reference, to the list of event handlers for this event.
void  RemoveHandler (Delegate handler)
  Remove an event handler from this event.
void  Raise (Object sender, Object args)
  Raise this event, triggering any registered event handlers whose WeakReferences have not been collected.

Member Function Documentation

void CSharpUtilities::WeakEvent::AddHandler ( Delegate  handler ) [inline]

Add a handler, maintained by weak reference, to the list of event handlers for this event.

Parameters:
handler Event handler
void CSharpUtilities::WeakEvent::RemoveHandler ( Delegate  handler ) [inline]

Remove an event handler from this event.

Parameters:
handler Event handler
void CSharpUtilities::WeakEvent::Raise ( Object  sender,
Object  args 
) [inline]

Raise this event, triggering any registered event handlers whose WeakReferences have not been collected.

Parameters:
sender Source object for this event.
args Information about the event.

CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent
CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent CSharpUtilities::WeakEvent