Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ToggleButtonAutomationPeer.cs
- DataError.cs
- PrimitiveXmlSerializers.cs
- ZipPackagePart.cs
- ReferenceEqualityComparer.cs
- SessionParameter.cs
- Form.cs
- DiffuseMaterial.cs
- TextViewSelectionProcessor.cs
- CookieProtection.cs
- ExceptionValidationRule.cs
- SqlBuffer.cs
- CompilationUtil.cs
- ErrorRuntimeConfig.cs
- Rfc2898DeriveBytes.cs
- PresentationAppDomainManager.cs
- TextEditorCharacters.cs
- PathStreamGeometryContext.cs
- MemberInfoSerializationHolder.cs
- __TransparentProxy.cs
- TypeUtil.cs
- ToolTip.cs
- DataSourceView.cs
- WorkflowFileItem.cs
- TimelineGroup.cs
- RegexStringValidator.cs
- FileDataSourceCache.cs
- SchemaHelper.cs
- ListViewGroupConverter.cs
- DocumentViewerConstants.cs
- XsltQilFactory.cs
- DBAsyncResult.cs
- RawTextInputReport.cs
- DateTimeStorage.cs
- DefaultEventAttribute.cs
- ProfileSettings.cs
- ResourceManager.cs
- DataObjectMethodAttribute.cs
- ApplicationServicesHostFactory.cs
- UserControlParser.cs
- ContentTextAutomationPeer.cs
- GlobalItem.cs
- StringToken.cs
- ResourceReferenceKeyNotFoundException.cs
- Color.cs
- RIPEMD160Managed.cs
- UniformGrid.cs
- CommentEmitter.cs
- StrokeCollectionDefaultValueFactory.cs
- Subset.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- DecimalAnimationBase.cs
- ResourcePool.cs
- XamlPointCollectionSerializer.cs
- MSAAWinEventWrap.cs
- EditBehavior.cs
- _NTAuthentication.cs
- ReflectionUtil.cs
- WindowsIPAddress.cs
- SizeLimitedCache.cs
- AttachedPropertyBrowsableAttribute.cs
- SqlClientMetaDataCollectionNames.cs
- TextTreeUndoUnit.cs
- NativeMethods.cs
- XmlSchemaParticle.cs
- RoleGroup.cs
- CacheForPrimitiveTypes.cs
- PersonalizationStateInfo.cs
- SafeProcessHandle.cs
- BamlResourceDeserializer.cs
- CustomValidator.cs
- ImplicitInputBrush.cs
- CodeTryCatchFinallyStatement.cs
- ImageAttributes.cs
- ListViewEditEventArgs.cs
- DocumentViewerBase.cs
- Grid.cs
- HttpModulesSection.cs
- ValidationEventArgs.cs
- HitTestResult.cs
- InvokeAction.cs
- ScriptHandlerFactory.cs
- GeneralTransform3DGroup.cs
- SetState.cs
- CachedRequestParams.cs
- ApplicationActivator.cs
- ConditionalWeakTable.cs
- DeclarationUpdate.cs
- ListenerBinder.cs
- AuthenticationConfig.cs
- webbrowsersite.cs
- InternalConfirm.cs
- WorkflowControlEndpoint.cs
- SqlServer2KCompatibilityCheck.cs
- GeneralTransformGroup.cs
- HostingEnvironmentException.cs
- HttpServerVarsCollection.cs
- URLAttribute.cs
- DbProviderFactories.cs
- CryptoStream.cs