Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- CompilationPass2Task.cs
- TypeUsage.cs
- itemelement.cs
- SmtpNetworkElement.cs
- QilList.cs
- StylusButtonCollection.cs
- ContextInformation.cs
- Font.cs
- XmlCharType.cs
- MessageQueuePermission.cs
- MasterPage.cs
- BaseTemplateCodeDomTreeGenerator.cs
- ResourceManager.cs
- SQLStringStorage.cs
- VisualBrush.cs
- PermissionSetTriple.cs
- RadioButton.cs
- ConsoleTraceListener.cs
- ScriptResourceInfo.cs
- ActivationArguments.cs
- DesignerActionListCollection.cs
- UnionExpr.cs
- ResourceLoader.cs
- OracleInfoMessageEventArgs.cs
- basemetadatamappingvisitor.cs
- ServiceProviders.cs
- ListViewTableCell.cs
- XsdDuration.cs
- PinProtectionHelper.cs
- EFColumnProvider.cs
- MetadataHelper.cs
- IdentityReference.cs
- ShapeTypeface.cs
- unitconverter.cs
- SuppressIldasmAttribute.cs
- namescope.cs
- GradientStopCollection.cs
- HtmlInputPassword.cs
- DataGridViewLayoutData.cs
- CalendarDay.cs
- Debugger.cs
- SeekStoryboard.cs
- MultipleViewPattern.cs
- ProcessHost.cs
- DocumentReference.cs
- TimeSpan.cs
- SafeNativeMethodsMilCoreApi.cs
- BamlCollectionHolder.cs
- IPGlobalProperties.cs
- XmlSchemaValidationException.cs
- SqlDataRecord.cs
- XmlCharCheckingReader.cs
- DependencyPropertyAttribute.cs
- NativeMethods.cs
- BaseTemplateCodeDomTreeGenerator.cs
- EmissiveMaterial.cs
- XmlTypeMapping.cs
- Pool.cs
- ImportCatalogPart.cs
- RuntimeEnvironment.cs
- ExpressionBuilder.cs
- ParameterBuilder.cs
- HMACRIPEMD160.cs
- Barrier.cs
- SystemIPInterfaceStatistics.cs
- CollectionType.cs
- HtmlTableCellCollection.cs
- AttachedPropertyMethodSelector.cs
- WebPageTraceListener.cs
- TextBoxBase.cs
- RequestCacheManager.cs
- QilXmlWriter.cs
- XmlSchemaAll.cs
- Models.cs
- GridViewDeletedEventArgs.cs
- ProbeMatchesMessageCD1.cs
- AlignmentXValidation.cs
- StylusPointProperties.cs
- FileRecordSequenceHelper.cs
- ColorEditor.cs
- MediaContext.cs
- ExpressionTextBox.xaml.cs
- MessagePartDescription.cs
- SecurityUtils.cs
- ResizeGrip.cs
- RectangleConverter.cs
- RequestCacheManager.cs
- ResourcePart.cs
- ToolStripMenuItem.cs
- ScriptReferenceEventArgs.cs
- DesignerContextDescriptor.cs
- ToolStripDropTargetManager.cs
- Misc.cs
- InkCanvasSelectionAdorner.cs
- DataGridViewRowPrePaintEventArgs.cs
- ContainerParagraph.cs
- IteratorFilter.cs
- XPathChildIterator.cs
- TextEndOfLine.cs
- QilVisitor.cs