Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / System / Windows / Input / Stylus / PenThreadPool.cs / 1 / PenThreadPool.cs
using System; using System.Collections.Generic; using System.Threading; using System.Windows.Threading; using System.Security; using System.Security.Permissions; using MS.Win32.Penimc; namespace System.Windows.Input { ///////////////////////////////////////////////////////////////////////// ////// /// internal class PenThreadPool { ////// Critical - Constructor for singleton of our PenThreadPool. /// marking this critical to prevent inadvertant access by transparent code /// /// Called by critical methods: /// Instance (above) /// /// [SecurityCritical] static PenThreadPool() { } ///////////////////////////////////////////////////////////////////// ////// /// ////// Critical - marking this critical to prevent inadvertant /// access by transparent code /// /// [SecurityCritical] [ThreadStatic] private static PenThreadPool _penThreadPool; ///////////////////////////////////////////////////////////////////// ////// ////// Critical - Returns a PenThread (creates as needed). /// marking this critical to prevent inadvertant access by transparent code /// /// Called by critical methods: /// PenContext.Dispose /// PenContext.Enable /// PenContext.Disable /// /// [SecurityCritical] internal static PenThread GetPenThreadForPenContext(PenContext penContext) { // Create the threadstatic DynamicRendererThreadManager as needed for calling thread. // It only creates one if (_penThreadPool == null) { _penThreadPool = new PenThreadPool(); } return _penThreadPool.GetPenThreadForPenContextHelper(penContext); // Adds to weak ref list if creating new one. } ///////////////////////////////////////////////////////////////////// ////// /// ////// Critical - marking this critical to prevent inadvertant /// access by transparent code /// /// [SecurityCritical] private List_penThreadWeakRefList; ///////////////////////////////////////////////////////////////////// /// /// /// ////// Critical - Initializes critical data: m_PenThreads /// /// [SecurityCritical] internal PenThreadPool() { _penThreadWeakRefList = new List(); } /// /// Critical - Calls SecurityCritical code (PenThread constructor). /// Called by BeginService. /// TreatAsSafe boundry is Stylus.EnableCore, Stylus.RegisterHwndForInput /// and HwndWrapperHook class (via HwndSource.InputFilterMessage). /// [SecurityCritical] private PenThread GetPenThreadForPenContextHelper(PenContext penContext) { bool needCleanup = false; PenThread penThread = null; int i; // Scan existing penthreads to see if we have an available slot for context. for (i=0; i < _penThreadWeakRefList.Count; i++) { PenThread penThreadFound = _penThreadWeakRefList[i].Target as PenThread; if (penThreadFound == null) { needCleanup = true; } else { // See if we can use this one if (penContext == null || penThreadFound.AddPenContext(penContext)) { // We can use this one. penThread = penThreadFound; break; } } } if (needCleanup) { // prune invalid refs for (i=_penThreadWeakRefList.Count - 1; i >= 0; i--) { if (_penThreadWeakRefList[i].Target == null) { _penThreadWeakRefList.RemoveAt(i); } } } if (penThread == null) { penThread = new PenThread(); // Make sure we add this context to the penthread if (penContext != null) { penThread.AddPenContext(penContext); } _penThreadWeakRefList.Add(new WeakReference(penThread)); } return penThread; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Collections.Generic; using System.Threading; using System.Windows.Threading; using System.Security; using System.Security.Permissions; using MS.Win32.Penimc; namespace System.Windows.Input { ///////////////////////////////////////////////////////////////////////// ////// /// internal class PenThreadPool { ////// Critical - Constructor for singleton of our PenThreadPool. /// marking this critical to prevent inadvertant access by transparent code /// /// Called by critical methods: /// Instance (above) /// /// [SecurityCritical] static PenThreadPool() { } ///////////////////////////////////////////////////////////////////// ////// /// ////// Critical - marking this critical to prevent inadvertant /// access by transparent code /// /// [SecurityCritical] [ThreadStatic] private static PenThreadPool _penThreadPool; ///////////////////////////////////////////////////////////////////// ////// ////// Critical - Returns a PenThread (creates as needed). /// marking this critical to prevent inadvertant access by transparent code /// /// Called by critical methods: /// PenContext.Dispose /// PenContext.Enable /// PenContext.Disable /// /// [SecurityCritical] internal static PenThread GetPenThreadForPenContext(PenContext penContext) { // Create the threadstatic DynamicRendererThreadManager as needed for calling thread. // It only creates one if (_penThreadPool == null) { _penThreadPool = new PenThreadPool(); } return _penThreadPool.GetPenThreadForPenContextHelper(penContext); // Adds to weak ref list if creating new one. } ///////////////////////////////////////////////////////////////////// ////// /// ////// Critical - marking this critical to prevent inadvertant /// access by transparent code /// /// [SecurityCritical] private List_penThreadWeakRefList; ///////////////////////////////////////////////////////////////////// /// /// /// ////// Critical - Initializes critical data: m_PenThreads /// /// [SecurityCritical] internal PenThreadPool() { _penThreadWeakRefList = new List(); } /// /// Critical - Calls SecurityCritical code (PenThread constructor). /// Called by BeginService. /// TreatAsSafe boundry is Stylus.EnableCore, Stylus.RegisterHwndForInput /// and HwndWrapperHook class (via HwndSource.InputFilterMessage). /// [SecurityCritical] private PenThread GetPenThreadForPenContextHelper(PenContext penContext) { bool needCleanup = false; PenThread penThread = null; int i; // Scan existing penthreads to see if we have an available slot for context. for (i=0; i < _penThreadWeakRefList.Count; i++) { PenThread penThreadFound = _penThreadWeakRefList[i].Target as PenThread; if (penThreadFound == null) { needCleanup = true; } else { // See if we can use this one if (penContext == null || penThreadFound.AddPenContext(penContext)) { // We can use this one. penThread = penThreadFound; break; } } } if (needCleanup) { // prune invalid refs for (i=_penThreadWeakRefList.Count - 1; i >= 0; i--) { if (_penThreadWeakRefList[i].Target == null) { _penThreadWeakRefList.RemoveAt(i); } } } if (penThread == null) { penThread = new PenThread(); // Make sure we add this context to the penthread if (penContext != null) { penThread.AddPenContext(penContext); } _penThreadWeakRefList.Add(new WeakReference(penThread)); } return penThread; } } } // 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
- PolyQuadraticBezierSegmentFigureLogic.cs
- PasswordTextContainer.cs
- HttpApplication.cs
- PrincipalPermission.cs
- PointF.cs
- TileBrush.cs
- WSSecurityTokenSerializer.cs
- FileChangeNotifier.cs
- ModelUIElement3D.cs
- NumberSubstitution.cs
- AllMembershipCondition.cs
- IndexerNameAttribute.cs
- PersistenceIOParticipant.cs
- FamilyMap.cs
- CellLabel.cs
- DynamicControlParameter.cs
- SkinBuilder.cs
- GeometryModel3D.cs
- ServiceDurableInstance.cs
- MaterialCollection.cs
- EdmSchemaAttribute.cs
- EDesignUtil.cs
- StatusBarPanel.cs
- Emitter.cs
- TextFormatterImp.cs
- PointCollection.cs
- DoubleLinkList.cs
- ServiceDescriptionSerializer.cs
- dsa.cs
- QueryStringParameter.cs
- CounterCreationDataCollection.cs
- Rect.cs
- TypeDescriptorContext.cs
- RelationshipDetailsRow.cs
- NestedContainer.cs
- HttpHandlerActionCollection.cs
- GeneralEndpointIdentity.cs
- UnionCodeGroup.cs
- QilGenerator.cs
- ProcessInfo.cs
- PropertySegmentSerializer.cs
- altserialization.cs
- Emitter.cs
- CodeTypeReference.cs
- SectionVisual.cs
- LicFileLicenseProvider.cs
- OperationCanceledException.cs
- Line.cs
- DeviceContext2.cs
- DataFormats.cs
- DataGridItem.cs
- ReflectionPermission.cs
- DrawingGroup.cs
- ProvidersHelper.cs
- PropertiesTab.cs
- SpecularMaterial.cs
- WindowsStatusBar.cs
- Funcletizer.cs
- ExceptionTrace.cs
- SplitContainerDesigner.cs
- GeometryModel3D.cs
- XmlSchemaGroupRef.cs
- WinInet.cs
- BaseParaClient.cs
- HelpProvider.cs
- ScrollBar.cs
- SecurityPolicySection.cs
- CustomErrorsSectionWrapper.cs
- DataRow.cs
- RSAOAEPKeyExchangeFormatter.cs
- URIFormatException.cs
- SiteMapDataSource.cs
- CompoundFileStreamReference.cs
- FlagsAttribute.cs
- DrawItemEvent.cs
- DataListItemEventArgs.cs
- HtmlElementCollection.cs
- XmlArrayItemAttributes.cs
- COM2EnumConverter.cs
- ListViewUpdateEventArgs.cs
- GridSplitterAutomationPeer.cs
- SqlTriggerContext.cs
- ReturnType.cs
- QuaternionAnimationUsingKeyFrames.cs
- TileBrush.cs
- AutomationPeer.cs
- HttpCacheVary.cs
- DbUpdateCommandTree.cs
- CodeValidator.cs
- SerializeAbsoluteContext.cs
- AccessedThroughPropertyAttribute.cs
- entityreference_tresulttype.cs
- InvalidMessageContractException.cs
- ClassHandlersStore.cs
- HiddenField.cs
- VoiceChangeEventArgs.cs
- HttpCapabilitiesSectionHandler.cs
- DebugView.cs
- Decoder.cs
- XmlHierarchicalEnumerable.cs