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
- ControlDesignerState.cs
- ConnectionStringSettingsCollection.cs
- XPathSingletonIterator.cs
- TextTreeRootTextBlock.cs
- SqlConnectionPoolProviderInfo.cs
- KeyValueConfigurationElement.cs
- WorkflowQueue.cs
- DataServiceRequest.cs
- TableHeaderCell.cs
- WindowCollection.cs
- Walker.cs
- WebPermission.cs
- VersionedStreamOwner.cs
- OdbcRowUpdatingEvent.cs
- RealizedColumnsBlock.cs
- KeyValuePair.cs
- MergeFilterQuery.cs
- ScriptResourceMapping.cs
- MimeMapping.cs
- DSACryptoServiceProvider.cs
- Update.cs
- EntitySqlQueryBuilder.cs
- TableItemProviderWrapper.cs
- Cloud.cs
- GridItem.cs
- Slider.cs
- SoapSchemaImporter.cs
- Operand.cs
- GiveFeedbackEventArgs.cs
- HelloOperation11AsyncResult.cs
- SQLInt16.cs
- RequiredFieldValidator.cs
- Page.cs
- DataSetMappper.cs
- LabelDesigner.cs
- DockAndAnchorLayout.cs
- Win32SafeHandles.cs
- PrimaryKeyTypeConverter.cs
- NullReferenceException.cs
- TypeConverter.cs
- recordstatescratchpad.cs
- Exceptions.cs
- ResourcePool.cs
- CorrelationManager.cs
- _LazyAsyncResult.cs
- DropAnimation.xaml.cs
- METAHEADER.cs
- DataConnectionHelper.cs
- CompressionTransform.cs
- AstNode.cs
- SqlProviderManifest.cs
- PolicyManager.cs
- XComponentModel.cs
- WebPartMenu.cs
- CaseInsensitiveOrdinalStringComparer.cs
- PartialTrustVisibleAssembly.cs
- ScrollChrome.cs
- ContainerUtilities.cs
- DataGridViewLinkCell.cs
- FontResourceCache.cs
- Rules.cs
- FrameworkElementAutomationPeer.cs
- HostingPreferredMapPath.cs
- DbConnectionInternal.cs
- PageCodeDomTreeGenerator.cs
- RandomDelaySendsAsyncResult.cs
- Expressions.cs
- AuthenticationManager.cs
- xdrvalidator.cs
- GB18030Encoding.cs
- ContentHostHelper.cs
- UnsafeNativeMethods.cs
- Hashtable.cs
- NativeCppClassAttribute.cs
- Splitter.cs
- ListViewInsertionMark.cs
- RenderContext.cs
- XslAst.cs
- DataGridViewLinkCell.cs
- MLangCodePageEncoding.cs
- RijndaelManaged.cs
- EventLogTraceListener.cs
- ImpersonationContext.cs
- BaseTemplateCodeDomTreeGenerator.cs
- ExpandableObjectConverter.cs
- PartManifestEntry.cs
- Bidi.cs
- CacheDependency.cs
- DecoderFallback.cs
- RequestCacheValidator.cs
- AuthorizationRuleCollection.cs
- DiagnosticTrace.cs
- XMLSchema.cs
- ReadOnlyDictionary.cs
- SelectionHighlightInfo.cs
- RelationshipConverter.cs
- CodeBlockBuilder.cs
- PDBReader.cs
- MDIClient.cs
- RegexStringValidator.cs