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
- OrderedDictionary.cs
- CaretElement.cs
- DocumentViewer.cs
- FocusManager.cs
- ObjectDataSource.cs
- RuntimeArgumentHandle.cs
- DesignerForm.cs
- RegexStringValidator.cs
- XsdSchemaFileEditor.cs
- StringInfo.cs
- ClipboardProcessor.cs
- FlowLayout.cs
- DoubleUtil.cs
- OdbcConnectionStringbuilder.cs
- FlowDocumentFormatter.cs
- XamlFigureLengthSerializer.cs
- ThreadAbortException.cs
- AutomationElement.cs
- XmlReader.cs
- ReadWriteSpinLock.cs
- DetailsViewInsertedEventArgs.cs
- CryptoApi.cs
- NavigationFailedEventArgs.cs
- SQLDateTime.cs
- SecurityKeyType.cs
- DBAsyncResult.cs
- CommonObjectSecurity.cs
- AxisAngleRotation3D.cs
- RotateTransform3D.cs
- IPEndPoint.cs
- webclient.cs
- MasterPageCodeDomTreeGenerator.cs
- SmtpTransport.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- SecurityHelper.cs
- ItemsControlAutomationPeer.cs
- XmlILOptimizerVisitor.cs
- RectAnimation.cs
- _OverlappedAsyncResult.cs
- DataGridAddNewRow.cs
- FrameworkReadOnlyPropertyMetadata.cs
- LZCodec.cs
- Convert.cs
- ClassHandlersStore.cs
- RuntimeConfig.cs
- CodeDirectiveCollection.cs
- EditBehavior.cs
- ExpressionTextBox.xaml.cs
- DataServiceQueryContinuation.cs
- SspiSafeHandles.cs
- GraphicsPathIterator.cs
- MemoryPressure.cs
- AppDomainShutdownMonitor.cs
- BasicCellRelation.cs
- AspProxy.cs
- ValidationException.cs
- Transform3DCollection.cs
- HttpWriter.cs
- CodeCommentStatement.cs
- SrgsElementList.cs
- Viewport3DVisual.cs
- GridView.cs
- CompositeFontParser.cs
- TemplateBamlTreeBuilder.cs
- ZipPackagePart.cs
- ProxyWebPartManager.cs
- BinaryUtilClasses.cs
- EventHandlersDesigner.cs
- StringExpressionSet.cs
- DrawingServices.cs
- RayMeshGeometry3DHitTestResult.cs
- SystemIPInterfaceStatistics.cs
- XslTransformFileEditor.cs
- BinarySerializer.cs
- BinaryExpression.cs
- FeatureSupport.cs
- DisplayMemberTemplateSelector.cs
- BindingMemberInfo.cs
- GradientStopCollection.cs
- PackageDigitalSignatureManager.cs
- BaseAutoFormat.cs
- TextParagraph.cs
- XmlWrappingWriter.cs
- BitmapSourceSafeMILHandle.cs
- DataMember.cs
- RuntimeHandles.cs
- Automation.cs
- DirectoryNotFoundException.cs
- LocalTransaction.cs
- InteropAutomationProvider.cs
- RemoteAsymmetricSignatureFormatter.cs
- SelectorItemAutomationPeer.cs
- OdbcStatementHandle.cs
- VariableModifiersHelper.cs
- QilTargetType.cs
- BulletedListEventArgs.cs
- XmlSerializerFactory.cs
- dtdvalidator.cs
- DocumentGrid.cs
- HttpAsyncResult.cs