Revision: 29987
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        at August 6, 2010 01:04 by jmillerit
                            
                            Initial Code
    public class SingletonClassName
    {
        #region EventArg Declarations
        public class SingletonClassNameEventArgs : EventArgs
        {
            #region Properties
            public PropertyDataType PropertyName { get; set; }
            #endregion
            #region Constructors
            public SingletonClassNameEventArgs(PropertyDataType _PropertyName)
            {
                this.PropertyName = _PropertyName;
            }
            #endregion
        }
        #endregion
        #region Variable Declarations
        private static readonly SingletonClassName _instance = new SingletonClassName();
        private static object _threadSynchronizationHandle = null;
        #endregion
        #region Constructors
        //Note that we are making the constructor private.  Doing so ensures that the class cannot
        //be directly instantiated which is one of the principles of the Singleton pattern.
        private SingletonClassName()
        {
        }
        #endregion
        #region Singleton Access Point
        public static SingletonClassName Instance
        {
            get
            {
                lock (GetThreadSynchronizationHandle())
                {
                    return _instance;
                }
            }
        }
        #endregion
        #region Thread Synchronization Handles
        private static object GetThreadSynchronizationHandle()
        {
            //When the thread synchronization handle object is requested, we use the CompareExchange
            //method of the Interlocked class to see if the value is null.  If it is null, then we 
            //will create the new object.  If it is not null then we will return the previously
            //allocated lock target.
            Interlocked.CompareExchange(ref _threadSynchronizationHandle, new object(), null);
            return _threadSynchronizationHandle;
        }
        #endregion
        #region Public Event Handlers
        public event EventHandler<SingletonClassNameEventArgs> OnRaiseEventNameEvent;
        #endregion
        #region Public Raise Event Handlers
        public void RaiseEventNameEvent(SingletonClassNameEventArgs e)
        {
            //Note that we are making a temporary copy of the event to avoid the possibility of a race 
            //condition if the last subscriber of the event unsubscribes immediately after
            //the null check and before the actual event is raised.  
            EventHandler<SingletonClassNameEventArgs> eventHandler = OnRaiseEventNameEvent;
            //We will only raise the event if there are subscribers to the event.
            if (eventHandler != null)
            {
                eventHandler(this, e);
            }
        }
        #endregion
        #region Public Methods
        #endregion
        #region Private Methods
        #endregion
    }
                                Initial URL
Initial Description
Initial Title
Singleton With Event Handler
Initial Tags
Initial Language
C#