Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / Stylus / PenThreadPool.cs / 1305600 / 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
- MemberPathMap.cs
- Selection.cs
- SqlFlattener.cs
- EdmRelationshipRoleAttribute.cs
- RadialGradientBrush.cs
- FormsIdentity.cs
- Codec.cs
- FigureHelper.cs
- HeaderUtility.cs
- Encoder.cs
- MILUtilities.cs
- HttpContextWrapper.cs
- Task.cs
- CommandField.cs
- BindingCollection.cs
- ColorPalette.cs
- OutputCacheProviderCollection.cs
- EntityDataSource.cs
- CustomLineCap.cs
- ComAdminWrapper.cs
- FragmentQueryProcessor.cs
- XmlTextReaderImplHelpers.cs
- hresults.cs
- PageContentAsyncResult.cs
- DropShadowBitmapEffect.cs
- DataGridViewRowsAddedEventArgs.cs
- EntityWithChangeTrackerStrategy.cs
- BindStream.cs
- CompiledIdentityConstraint.cs
- BufferedGraphicsManager.cs
- SqlCachedBuffer.cs
- List.cs
- FrameworkContentElementAutomationPeer.cs
- BaseDataBoundControlDesigner.cs
- NativeMethodsCLR.cs
- TreeViewImageIndexConverter.cs
- LocatorGroup.cs
- DefaultBindingPropertyAttribute.cs
- XPathException.cs
- COAUTHIDENTITY.cs
- RC2.cs
- NamespaceDisplay.xaml.cs
- ExpandSegment.cs
- GeneralTransformCollection.cs
- WindowsMenu.cs
- TokenizerHelper.cs
- CodeSubDirectoriesCollection.cs
- OdbcHandle.cs
- XmlDataImplementation.cs
- TypeInitializationException.cs
- WebServiceBindingAttribute.cs
- XmlIlVisitor.cs
- XPathNavigator.cs
- RotateTransform3D.cs
- VarRemapper.cs
- SQLDateTime.cs
- SchemaTableOptionalColumn.cs
- Model3DGroup.cs
- XmlWriterSettings.cs
- UpDownEvent.cs
- PenContexts.cs
- SchemaObjectWriter.cs
- Sql8ConformanceChecker.cs
- ImageMapEventArgs.cs
- WebPartCatalogAddVerb.cs
- basecomparevalidator.cs
- DefaultValueTypeConverter.cs
- TraceHandlerErrorFormatter.cs
- _StreamFramer.cs
- CacheEntry.cs
- CompilerResults.cs
- CatalogZoneBase.cs
- VerificationException.cs
- AesCryptoServiceProvider.cs
- EntityException.cs
- InvalidTimeZoneException.cs
- COM2ExtendedBrowsingHandler.cs
- Pens.cs
- ErrorFormatterPage.cs
- DataRelationCollection.cs
- newinstructionaction.cs
- GACMembershipCondition.cs
- ProviderSettingsCollection.cs
- UriTemplateCompoundPathSegment.cs
- ErrorInfoXmlDocument.cs
- EntitySqlException.cs
- InstallHelper.cs
- NameObjectCollectionBase.cs
- XslCompiledTransform.cs
- ToolStripContentPanelDesigner.cs
- ResXResourceWriter.cs
- ConnectionsZone.cs
- PaintEvent.cs
- IssuerInformation.cs
- MembershipPasswordException.cs
- Int64Storage.cs
- StylusShape.cs
- StubHelpers.cs
- TypeSemantics.cs
- CommonGetThemePartSize.cs