this code adds new EventHandler (s) registers for an event named NewMail (the eventargs class is named NewMailEventArgs .
// A PUBLIC add_xxx method (xxx is the event name) // Allows methods to register interest in the event. public void add_NewMail(EventHandler<NewMailEventArgs> value) { // The loop and the call to CompareExchange is all just a fancy way // of adding a delegate to the event in a thread-safe way. EventHandler<NewMailEventArgs> prevHandler; EventHandler<NewMailEventArgs> newMail = this.NewMail; do { prevHandler = newMail; EventHandler<NewMailEventArgs> newHandler = (EventHandler<NewMailEventArgs>)Delegate.Combine(prevHandler, value); newMail = Interlocked.CompareExchange<EventHandler<NewMailEventArgs>>(ref this.NewMail, newHandler, prevHandler); } while(newMail != prevHandler); }
(source: CLR via C #, chapter 11 Events) What I do not understand is part of do, first we assign newMail prevHandler, then newMail changes (in CompareExchange) to newHandler? Then we check to see if newMail! = PrevHandler?
I'm really confused. Can someone help me understand what exactly is going on here, especially in the do loop?
c # event-handling events delegates
Razort4x
source share