Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ClientBuildManagerCallback.cs
- RuntimeTrackingProfile.cs
- VirtualizedItemPattern.cs
- InstanceCreationEditor.cs
- DependencyProperty.cs
- IPEndPoint.cs
- Missing.cs
- TabItemWrapperAutomationPeer.cs
- BezierSegment.cs
- CustomLineCap.cs
- shaperfactoryquerycachekey.cs
- MessageTransmitTraceRecord.cs
- basecomparevalidator.cs
- FlowPosition.cs
- MatrixValueSerializer.cs
- WorkflowElementDialog.cs
- SByteStorage.cs
- RijndaelManagedTransform.cs
- SessionPageStatePersister.cs
- TracePayload.cs
- DetailsViewInsertedEventArgs.cs
- CommandEventArgs.cs
- AspNetSynchronizationContext.cs
- IOException.cs
- CachedBitmap.cs
- TargetConverter.cs
- Vector3DCollectionConverter.cs
- SqlMethodTransformer.cs
- SeparatorAutomationPeer.cs
- TraceRecord.cs
- ISSmlParser.cs
- X509CertificateTrustedIssuerElement.cs
- SymbolDocumentInfo.cs
- ByteStorage.cs
- NavigatorInput.cs
- TextTreePropertyUndoUnit.cs
- EventDescriptor.cs
- CodeStatementCollection.cs
- InternalConfigRoot.cs
- PreDigestedSignedInfo.cs
- WebPartCloseVerb.cs
- ColorAnimationUsingKeyFrames.cs
- CodeSnippetExpression.cs
- Types.cs
- versioninfo.cs
- CorrelationService.cs
- XPathMessageFilterElementCollection.cs
- TypeUnloadedException.cs
- BaseTemplateCodeDomTreeGenerator.cs
- DetailsViewInsertEventArgs.cs
- UnescapedXmlDiagnosticData.cs
- DnsEndpointIdentity.cs
- Int64Storage.cs
- OptimalBreakSession.cs
- MenuItem.cs
- WebPartZone.cs
- ArraySet.cs
- SQLStringStorage.cs
- FileReservationCollection.cs
- ResourceContainer.cs
- EdmConstants.cs
- ScrollItemPatternIdentifiers.cs
- EncryptedType.cs
- QuaternionAnimationUsingKeyFrames.cs
- AdjustableArrowCap.cs
- BuilderInfo.cs
- ICspAsymmetricAlgorithm.cs
- ObjectDataSourceMethodEventArgs.cs
- ExpressionContext.cs
- DataConnectionHelper.cs
- NetworkStream.cs
- FixedSOMElement.cs
- FullTextBreakpoint.cs
- VersionedStream.cs
- StrongNameMembershipCondition.cs
- precedingsibling.cs
- Debug.cs
- XmlBufferReader.cs
- PersistNameAttribute.cs
- OutputCacheProfileCollection.cs
- XPathDocumentNavigator.cs
- DateTimeConstantAttribute.cs
- DesignerActionPanel.cs
- TextSegment.cs
- AnonymousIdentificationSection.cs
- DocumentXPathNavigator.cs
- ArgumentNullException.cs
- InternalSafeNativeMethods.cs
- infer.cs
- TileModeValidation.cs
- ToolStripItemImageRenderEventArgs.cs
- BufferedWebEventProvider.cs
- Renderer.cs
- ColorDialog.cs
- FastPropertyAccessor.cs
- EncryptedPackageFilter.cs
- HandlerBase.cs
- SecurityTokenProvider.cs
- MultipleCopiesCollection.cs
- DesignObjectWrapper.cs