Code:
/ 4.0 / 4.0 / 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. 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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EpmTargetTree.cs
- ActivationServices.cs
- MessageQueuePermission.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- EntityModelSchemaGenerator.cs
- TabletCollection.cs
- ItemCollection.cs
- XmlDataSourceNodeDescriptor.cs
- CacheVirtualItemsEvent.cs
- DbParameterCollectionHelper.cs
- RequestResizeEvent.cs
- QueryOpeningEnumerator.cs
- MultiTouchSystemGestureLogic.cs
- ParameterCollection.cs
- RelationshipEndCollection.cs
- HandleExceptionArgs.cs
- NavigationPropertySingletonExpression.cs
- Literal.cs
- ScrollItemPatternIdentifiers.cs
- XPathNodeList.cs
- InputProcessorProfilesLoader.cs
- TypeSystem.cs
- XPathNodeIterator.cs
- CommonProperties.cs
- TriggerCollection.cs
- ACE.cs
- TextLineBreak.cs
- SatelliteContractVersionAttribute.cs
- ToolStripSeparatorRenderEventArgs.cs
- ConfigurationElementProperty.cs
- GeneralTransform3DTo2DTo3D.cs
- Calendar.cs
- GregorianCalendar.cs
- SamlAttributeStatement.cs
- ConfigurationManagerHelperFactory.cs
- MethodImplAttribute.cs
- ScriptBehaviorDescriptor.cs
- XamlStackWriter.cs
- PrePostDescendentsWalker.cs
- XsdDuration.cs
- RMEnrollmentPage2.cs
- Margins.cs
- TypeGeneratedEventArgs.cs
- LabelLiteral.cs
- XmlILModule.cs
- DefinitionBase.cs
- PolicyStatement.cs
- PropertyTab.cs
- ViewgenGatekeeper.cs
- Panel.cs
- VSWCFServiceContractGenerator.cs
- ConfigurationPropertyAttribute.cs
- TileBrush.cs
- Scheduler.cs
- TextOutput.cs
- ToolboxItemLoader.cs
- RowUpdatingEventArgs.cs
- AndCondition.cs
- HtmlValidatorAdapter.cs
- XamlStackWriter.cs
- ZoneLinkButton.cs
- XPathNode.cs
- OleDbRowUpdatedEvent.cs
- SiteMapNodeItemEventArgs.cs
- EventWaitHandleSecurity.cs
- XmlAnyElementAttributes.cs
- Permission.cs
- VScrollBar.cs
- ScopedKnownTypes.cs
- Opcode.cs
- CacheOutputQuery.cs
- RijndaelManaged.cs
- AuthorizationBehavior.cs
- ConfigurationValues.cs
- XslTransform.cs
- DataGridViewHitTestInfo.cs
- WebBrowser.cs
- ArgumentValidation.cs
- PaperSource.cs
- CompositeTypefaceMetrics.cs
- TextTreeRootTextBlock.cs
- ClosureBinding.cs
- BaseDataBoundControlDesigner.cs
- XmlUtilWriter.cs
- TaiwanLunisolarCalendar.cs
- StringUtil.cs
- HttpResponse.cs
- RotateTransform3D.cs
- InvalidOperationException.cs
- Expander.cs
- ObjectDataSourceSelectingEventArgs.cs
- EntityDataSourceValidationException.cs
- WindowsButton.cs
- NamespaceCollection.cs
- DebugHandleTracker.cs
- ViewBase.cs
- IISUnsafeMethods.cs
- ColorMatrix.cs
- AssociationType.cs
- SystemNetworkInterface.cs