EventRouteFactory.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / EventRouteFactory.cs / 1305600 / EventRouteFactory.cs

                            using System; 
using System.Windows;

using MS.Utility;
 
namespace System.Windows
{ 
    ///  
    ///     Creates and recycles instance of EventRoute
    ///  
    internal static class EventRouteFactory
    {
        #region Operations
 
        /// 
        ///     Fetch a recycled object if available 
        ///     else create a new instance 
        /// 
        internal static EventRoute FetchObject(RoutedEvent routedEvent) 
        {
            EventRoute eventRoute = Pop();

            if (eventRoute == null) 
            {
                eventRoute = new EventRoute(routedEvent); 
            } 
            else
            { 
                eventRoute.RoutedEvent = routedEvent;
            }

            return eventRoute; 
        }
 
        ///  
        ///     Recycle the given instance of EventRoute
        ///  
        internal static void RecycleObject(EventRoute eventRoute)
        {
            // Cleanup all refernces held
            eventRoute.Clear(); 

            // Push instance on to the stack 
            Push(eventRoute); 
        }
 
        #endregion Operations

        #region HelperMethods
 
        /// 
        ///     Push the given instance of EventRoute on to the stack 
        ///  
        private static void Push(EventRoute eventRoute)
        { 
            lock (_synchronized)
            {
                // In a normal scenario it is extremely rare to
                // require more than 2 EventRoutes at the same time 
                if (_eventRouteStack == null)
                { 
                    _eventRouteStack = new EventRoute[2]; 
                    _stackTop = 0;
                } 

                if (_stackTop < 2)
                {
                    _eventRouteStack[_stackTop++] = eventRoute; 
                }
            } 
        } 

        ///  
        ///     Pop off the last instance of EventRoute in the stack
        /// 
        private static EventRoute Pop()
        { 
            lock (_synchronized)
            { 
                if (_stackTop > 0) 
                {
                    EventRoute eventRoute = _eventRouteStack[--_stackTop]; 
                    _eventRouteStack[_stackTop] = null;
                    return eventRoute;
                }
            } 

            return null; 
        } 

        #endregion HelperMethods 

        #region Data

        private static EventRoute[] _eventRouteStack; 
        private static int _stackTop;
        private static object _synchronized = new object(); 
 
        #endregion Data
    } 
}


// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK