The problem I think is that the publisher of an event is not generally the
one that can make the decision about whether the subscriber is collectable
or not-- that's a job more properly left to the subscriber. The current
event model is thus that the subscriber is somehow informed that the
publisher (form) would like to go away and it can then unsubscribe to break
the circular reference.
It would be quite easy to implement a WeakDelegate/WeakMulticastDelegate
where the target was a WeakReference, this would give you the behavior you
wanted. Someone is bound to reply that this is not possible as Delegate and
MulticastDelegate cannot be derived from (in C#). But you could make your
own separate classes. If I were to do this, actually I would allow the
WeakMulticastDelegate to have a combination of normal Delegate and
WeakDelegate members in its invocation list.
S.