zoukankan      html  css  js  c++  java
  • Setting an Event to Null

    I have a code like this:

    public class SomeClass
    {
        int _processProgress;
        public int ProcessProgress 
        { 
            get { return _processProgress; } 
            set 
            { 
                _processProgress = value; 
                if (ProcessProgressChanged != null) 
                    ProcessProgressChanged(value);
            } 
        }
    
        public delegate void ProcessProgressChangedEventHandler(int progressPercentage);
        public event ProcessProgressChangedEventHandler ProcessProgressChanged;
    
        public void ClearProcessProgressChangedEvent()
        {
            this.ProcessProgressChanged = null;
        }
    }
    

    Will it unsubscribe all method in the ProcessProgressChanged event when I call the ClearProcessProgressChangedEvent() method?

    My code is in C#, framework 4, build in VS2010 Pro, project is in Winforms.

    Well, it'll effectively clear the list of subscribers, yes (by setting the underlying delegate field to null) - so that the next time ProcessProgress is set, no handlers will be called. It's not really setting theevent to null - it's setting the underlying field to null. It's just that the C# compiler is creating both an event (a subscribe/unsubscribe pair of methods) and a field (to store the handlers) using a single declaration.

    You may find my article about events and delegates useful.

    Note that your event-raising code currently isn't thread-safe. I don't know whether it needs to be or not, but you might want to consider using:

    set 
    { 
        _processProgress = value; 
        var handlers = ProcessProgressChanged;
        if (handlers != null) 
        {
            handlers(value);
        }
    }
    

    That way you won't get a NullReferenceException if the last handler is unsubscribed after the nullity check but before the invocation.

  • 相关阅读:
    NOIP 模拟 $94; m 超级加倍$
    NOIP 模拟 $94; m 欢乐豆$
    NOIP 模拟 $94; m 叁仟柒佰万$
    NOIP 模拟 $94; m 开挂$
    NOIP 模拟 $92; m 优美的旋律$
    NOIP 模拟 $92; m 翻转游戏$
    NOIP 模拟 $92; m 石子合并$
    NOIP 模拟 $90; m 校门外歪脖树上的鸽子$
    NOIP 模拟 $90; m 混乱邪恶$
    NOIP 模拟 $90; m 快速排序$
  • 原文地址:https://www.cnblogs.com/zjoch/p/4757026.html
Copyright © 2011-2022 走看看