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
- PageHandlerFactory.cs
- SchemaConstraints.cs
- XmlNamespaceMappingCollection.cs
- StructuredProperty.cs
- ObjectContext.cs
- _NTAuthentication.cs
- ClientTargetCollection.cs
- ButtonColumn.cs
- CatalogPart.cs
- XmlSerializerSection.cs
- SqlDataSourceCommandEventArgs.cs
- DbParameterCollection.cs
- ManagementEventArgs.cs
- InstalledFontCollection.cs
- Point3D.cs
- BinaryConverter.cs
- AutomationAttributeInfo.cs
- XmlNodeComparer.cs
- IPEndPoint.cs
- ListQueryResults.cs
- ReceiveContext.cs
- HMACMD5.cs
- CopyOfAction.cs
- EntitySqlException.cs
- HttpPostClientProtocol.cs
- Rectangle.cs
- Button.cs
- XNodeNavigator.cs
- FixedElement.cs
- StorageScalarPropertyMapping.cs
- FocusTracker.cs
- FormViewPagerRow.cs
- VectorAnimationUsingKeyFrames.cs
- SQLByteStorage.cs
- Site.cs
- FormCollection.cs
- XmlSerializerAssemblyAttribute.cs
- GridView.cs
- ResourceExpressionBuilder.cs
- HtmlTextBoxAdapter.cs
- BamlCollectionHolder.cs
- TypeConverterAttribute.cs
- MobileListItemCollection.cs
- Translator.cs
- TailCallAnalyzer.cs
- ToolStripAdornerWindowService.cs
- SelectionManager.cs
- XmlSchemaGroupRef.cs
- ToolStripGripRenderEventArgs.cs
- DomainUpDown.cs
- InvokeMethodActivityDesigner.cs
- HttpRequest.cs
- AmbientLight.cs
- EntityChangedParams.cs
- SupportingTokenChannel.cs
- OdbcConnectionStringbuilder.cs
- MatchSingleFxEngineOpcode.cs
- WebPartRestoreVerb.cs
- SystemIPv6InterfaceProperties.cs
- Opcode.cs
- UnsafeMethods.cs
- RelationalExpressions.cs
- ControllableStoryboardAction.cs
- SortFieldComparer.cs
- KeyGesture.cs
- Pen.cs
- TextServicesDisplayAttribute.cs
- GeneralTransformGroup.cs
- GridViewColumnHeaderAutomationPeer.cs
- GC.cs
- AsymmetricKeyExchangeFormatter.cs
- Avt.cs
- Debugger.cs
- PeerApplication.cs
- AspNetHostingPermission.cs
- ComponentRenameEvent.cs
- MetadataCache.cs
- VisualStyleTypesAndProperties.cs
- IconBitmapDecoder.cs
- ColumnMapCopier.cs
- FontStretches.cs
- SecurityHeaderLayout.cs
- DataSourceCacheDurationConverter.cs
- ComponentEvent.cs
- DBConnectionString.cs
- PathGradientBrush.cs
- TypeSource.cs
- FrameworkElement.cs
- BlockCollection.cs
- HuffmanTree.cs
- Error.cs
- BufferedWebEventProvider.cs
- RsaSecurityTokenParameters.cs
- RegexRunner.cs
- BuildProviderCollection.cs
- AspCompat.cs
- WebPartConnectVerb.cs
- ControllableStoryboardAction.cs
- StringKeyFrameCollection.cs
- MSAANativeProvider.cs