Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ScrollItemPattern.cs
- SQLGuidStorage.cs
- DocumentViewerAutomationPeer.cs
- HtmlInputHidden.cs
- MouseGestureValueSerializer.cs
- DashStyle.cs
- TextStore.cs
- PositiveTimeSpanValidator.cs
- SQLMembershipProvider.cs
- ClassValidator.cs
- SmtpCommands.cs
- IFlowDocumentViewer.cs
- Matrix3D.cs
- WebProxyScriptElement.cs
- GridViewCellAutomationPeer.cs
- Scene3D.cs
- AutoGeneratedField.cs
- IsolatedStorageException.cs
- columnmapkeybuilder.cs
- ResourceExpressionBuilder.cs
- ComplexLine.cs
- Hex.cs
- UInt32Storage.cs
- SplitterDesigner.cs
- DefaultParameterValueAttribute.cs
- DataPagerFieldCollection.cs
- DataProtection.cs
- SymbolMethod.cs
- UInt16Converter.cs
- SmtpCommands.cs
- DataColumnChangeEvent.cs
- UrlMappingCollection.cs
- Substitution.cs
- UdpChannelListener.cs
- PseudoWebRequest.cs
- ViewPort3D.cs
- DropAnimation.xaml.cs
- MaskDescriptors.cs
- XmlSerializationGeneratedCode.cs
- AuthenticationSection.cs
- Socket.cs
- DataGridViewElement.cs
- webclient.cs
- BoolExpression.cs
- MapPathBasedVirtualPathProvider.cs
- Point.cs
- HttpCachePolicy.cs
- XmlChildEnumerator.cs
- XmlSchemaGroup.cs
- SaveCardRequest.cs
- securitycriticaldata.cs
- BaseCodeDomTreeGenerator.cs
- SHA256Managed.cs
- SpellCheck.cs
- ServiceMemoryGates.cs
- CodeSubDirectory.cs
- VirtualPath.cs
- ConfigurationElementProperty.cs
- InvalidFilterCriteriaException.cs
- TypeFieldSchema.cs
- SqlDataSourceRefreshSchemaForm.cs
- RootCodeDomSerializer.cs
- TabPage.cs
- TemplateControlParser.cs
- ConfigsHelper.cs
- BinHexEncoder.cs
- WebServiceErrorEvent.cs
- OdbcConnectionFactory.cs
- DbTransaction.cs
- TargetConverter.cs
- ClientScriptManager.cs
- DocumentsTrace.cs
- TcpClientChannel.cs
- ClientUrlResolverWrapper.cs
- HttpResponse.cs
- ParameterBuilder.cs
- KeyFrames.cs
- SchemaNames.cs
- HelpEvent.cs
- CodeDirectionExpression.cs
- BinaryObjectWriter.cs
- ButtonRenderer.cs
- DataKeyPropertyAttribute.cs
- UInt32.cs
- HostVisual.cs
- AnyAllSearchOperator.cs
- WebExceptionStatus.cs
- ZipIOExtraFieldZip64Element.cs
- GenericRootAutomationPeer.cs
- RoutedEventHandlerInfo.cs
- BindingListCollectionView.cs
- ArraySet.cs
- QueryContinueDragEventArgs.cs
- KeySpline.cs
- ClientSideQueueItem.cs
- OrderedDictionary.cs
- AutoCompleteStringCollection.cs
- SymbolType.cs
- InternalSafeNativeMethods.cs
- LogicalExpr.cs