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
- EncryptedData.cs
- Timeline.cs
- StreamMarshaler.cs
- MSAAWinEventWrap.cs
- SystemUnicastIPAddressInformation.cs
- CodeSnippetCompileUnit.cs
- ProxyWebPartConnectionCollection.cs
- InstanceCreationEditor.cs
- SocketAddress.cs
- HwndMouseInputProvider.cs
- FixedSchema.cs
- BitmapData.cs
- FormsAuthenticationModule.cs
- ConstructorBuilder.cs
- QilGenerator.cs
- OperatingSystem.cs
- TableDetailsRow.cs
- ThreadInterruptedException.cs
- LongMinMaxAggregationOperator.cs
- ProcessDesigner.cs
- SafeTokenHandle.cs
- ObjectDataSourceView.cs
- GetPageNumberCompletedEventArgs.cs
- Predicate.cs
- ProfileParameter.cs
- TextWriterEngine.cs
- TextFindEngine.cs
- xmlsaver.cs
- util.cs
- figurelengthconverter.cs
- XComponentModel.cs
- Canvas.cs
- Evidence.cs
- OracleColumn.cs
- DataSourceView.cs
- InvalidPropValue.cs
- PageTheme.cs
- WpfXamlLoader.cs
- Style.cs
- OracleDateTime.cs
- mda.cs
- ScopelessEnumAttribute.cs
- ProtectedProviderSettings.cs
- StatusBar.cs
- ApplicationTrust.cs
- VisualBasicValue.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- ApplicationActivator.cs
- WebEventCodes.cs
- ResXBuildProvider.cs
- DataGridColumnHeaderAutomationPeer.cs
- RegexBoyerMoore.cs
- followingsibling.cs
- DataServiceHostFactory.cs
- IndexOutOfRangeException.cs
- arclist.cs
- EditorZoneBase.cs
- GeneralTransform3DTo2DTo3D.cs
- MobileControlsSectionHelper.cs
- TimeSpanOrInfiniteValidator.cs
- ContourSegment.cs
- EndpointDiscoveryMetadata.cs
- XmlSchemaObjectCollection.cs
- StreamInfo.cs
- MouseGestureConverter.cs
- Annotation.cs
- BindingSource.cs
- Win32.cs
- UnsafeNativeMethods.cs
- Int32Animation.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- ChineseLunisolarCalendar.cs
- ComEventsInfo.cs
- InkPresenterAutomationPeer.cs
- ClipboardProcessor.cs
- CompilerLocalReference.cs
- ValidationRuleCollection.cs
- SchemaElementDecl.cs
- PropertyGeneratedEventArgs.cs
- ControlValuePropertyAttribute.cs
- WebPartVerb.cs
- CustomAttributeFormatException.cs
- COM2TypeInfoProcessor.cs
- MultipleViewProviderWrapper.cs
- WsdlBuildProvider.cs
- TextTreeUndo.cs
- MultiTrigger.cs
- X500Name.cs
- TrustLevelCollection.cs
- StaticFileHandler.cs
- RelationshipWrapper.cs
- WebBrowserBase.cs
- SqlDataSourceEnumerator.cs
- ClientProtocol.cs
- SHA384.cs
- MessageContractAttribute.cs
- StringUtil.cs
- ProcessingInstructionAction.cs
- _HeaderInfo.cs
- VariableModifiersHelper.cs