這個代碼,增加了註冊新的事件處理程序(個),命名爲NewMail
事件(EventArgs類被命名爲NewMailEventArgs
EventHandler:這段代碼是怎麼回事?
// 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);
}
(來源:通過C#,第11章活動)CLR 我也不是什麼理解是做的一部分,首先我們將newMail分配給prevHandler,然後newMail更改(在CompareExchange中)newHandler?然後我們檢查是否newMail!= prevHandler?
我真的有點困惑。任何人都可以幫助我理解什麼究竟是在這裏,特別是在做循環?