代码作者:大石头
private EventHandler _FieldsChanged;//代理
public event EventHandler FieldsChanged //事件
{
add //添加代理
{
EventHandler handler2;
EventHandler fieldsChanged = this._FieldsChanged;
do
{
handler2 = fieldsChanged;
EventHandler handler3 = (EventHandler)Delegate.Combine(handler2, value); //将委托数组的调用列表连接在一起
//比较两个代理是否相同,如果相同,则替换其中一个
fieldsChanged = Interlocked.CompareExchange<EventHandler>(ref this._FieldsChanged, handler3, handler2);
//详见 http://msdn.microsoft.com/zh-cn/library/k9hz8w9t(VS.80).aspx
}
while (fieldsChanged != handler2);
}
remove //移除代理
{
EventHandler handler2;
EventHandler fieldsChanged = this._FieldsChanged;
do
{
handler2 = fieldsChanged;
EventHandler handler3 = (EventHandler)Delegate.Remove(handler2, value);//从一个委托的调用列表中移除另一个委托的最后一个调用列表
//比较两个代理是否相同,如果相同,则替换其中一个
fieldsChanged = Interlocked.CompareExchange<EventHandler>(ref this._FieldsChanged, handler3, handler2);
}