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
- ComplexPropertyEntry.cs
- XXXOnTypeBuilderInstantiation.cs
- StaticDataManager.cs
- Action.cs
- RouteParameter.cs
- MethodBuilder.cs
- SqlRowUpdatingEvent.cs
- DefaultEventAttribute.cs
- AdornerDecorator.cs
- Track.cs
- Button.cs
- TemplateBuilder.cs
- EncoderBestFitFallback.cs
- NameValuePermission.cs
- CharKeyFrameCollection.cs
- TextChangedEventArgs.cs
- WebRequestModuleElementCollection.cs
- CardSpaceException.cs
- ConnectionStringsExpressionEditor.cs
- Base64Decoder.cs
- Operator.cs
- InstanceValue.cs
- ChtmlCommandAdapter.cs
- PeerNodeTraceRecord.cs
- FieldBuilder.cs
- URLMembershipCondition.cs
- Type.cs
- IntegerValidator.cs
- ToolTip.cs
- XPathSelfQuery.cs
- BinaryMessageFormatter.cs
- XmlSiteMapProvider.cs
- CompoundFileStreamReference.cs
- InstanceLockException.cs
- Cursor.cs
- BasicExpandProvider.cs
- ModuleBuilder.cs
- HttpCapabilitiesSectionHandler.cs
- FormsAuthenticationConfiguration.cs
- EndpointDispatcherTable.cs
- TextSelectionHelper.cs
- Label.cs
- Stack.cs
- TableRowCollection.cs
- StateManagedCollection.cs
- DataTemplate.cs
- Hyperlink.cs
- FixedSOMContainer.cs
- XmlAttributeHolder.cs
- TableCell.cs
- PaintValueEventArgs.cs
- xmlfixedPageInfo.cs
- XomlCompiler.cs
- RSAPKCS1SignatureDeformatter.cs
- FileSystemEventArgs.cs
- CallbackValidatorAttribute.cs
- DocumentCollection.cs
- SqlClientWrapperSmiStream.cs
- QueryCacheManager.cs
- XamlHostingSectionGroup.cs
- AspNetSynchronizationContext.cs
- OperandQuery.cs
- DecimalAnimationBase.cs
- RNGCryptoServiceProvider.cs
- TransformPatternIdentifiers.cs
- CollectionBuilder.cs
- ToolStripContentPanelRenderEventArgs.cs
- Delegate.cs
- HttpRequest.cs
- DataSourceExpressionCollection.cs
- TextContainerHelper.cs
- VisualStyleRenderer.cs
- CustomBindingElement.cs
- XXXOnTypeBuilderInstantiation.cs
- OverflowException.cs
- UTF7Encoding.cs
- StickyNoteContentControl.cs
- HiddenFieldDesigner.cs
- GridViewUpdatedEventArgs.cs
- RequestChannel.cs
- DataRow.cs
- AssemblyNameProxy.cs
- Model3D.cs
- FrameworkContentElement.cs
- ConstraintConverter.cs
- HttpContext.cs
- SortDescriptionCollection.cs
- ReachVisualSerializer.cs
- OperationCanceledException.cs
- StackOverflowException.cs
- BaseParser.cs
- GeometryValueSerializer.cs
- PolyBezierSegmentFigureLogic.cs
- EventDescriptorCollection.cs
- HatchBrush.cs
- DataGridViewRowCancelEventArgs.cs
- InProcStateClientManager.cs
- DataGridViewRowsAddedEventArgs.cs
- EmptyEnumerator.cs
- mediaeventargs.cs