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
- ClientData.cs
- DataObject.cs
- TileBrush.cs
- Geometry3D.cs
- DesignerActionTextItem.cs
- DefaultTraceListener.cs
- SqlMethodCallConverter.cs
- StringBlob.cs
- DataGridCommandEventArgs.cs
- TableColumn.cs
- WindowsGraphicsWrapper.cs
- controlskin.cs
- XamlToRtfWriter.cs
- DrawingGroup.cs
- NativeObjectSecurity.cs
- Msmq3PoisonHandler.cs
- ArithmeticException.cs
- Completion.cs
- XmlSerializationReader.cs
- DataRowView.cs
- DependencyPropertyHelper.cs
- ClientRoleProvider.cs
- MenuTracker.cs
- ColorMap.cs
- Adorner.cs
- WebPartZoneCollection.cs
- IdleTimeoutMonitor.cs
- DocumentCollection.cs
- ModelTreeManager.cs
- TreeIterator.cs
- XmlSchemaSet.cs
- CodeAssignStatement.cs
- XmlObjectSerializerReadContext.cs
- SystemWebCachingSectionGroup.cs
- TemplateApplicationHelper.cs
- EffectiveValueEntry.cs
- AsyncCompletedEventArgs.cs
- GifBitmapEncoder.cs
- CacheOutputQuery.cs
- SkewTransform.cs
- SafeNativeMethods.cs
- WebConvert.cs
- XmlSchemaAnnotation.cs
- RemotingException.cs
- DataViewSettingCollection.cs
- SlipBehavior.cs
- UserControl.cs
- BufferBuilder.cs
- NativeMethods.cs
- LogArchiveSnapshot.cs
- DXD.cs
- NotSupportedException.cs
- IconBitmapDecoder.cs
- BooleanAnimationUsingKeyFrames.cs
- XPathException.cs
- PeoplePickerWrapper.cs
- ParseChildrenAsPropertiesAttribute.cs
- WorkBatch.cs
- MouseOverProperty.cs
- SspiNegotiationTokenAuthenticator.cs
- ContentDisposition.cs
- RepeaterCommandEventArgs.cs
- ParserExtension.cs
- MemberAccessException.cs
- FileNotFoundException.cs
- StreamResourceInfo.cs
- TypeDependencyAttribute.cs
- RegistryDataKey.cs
- RoutedPropertyChangedEventArgs.cs
- DeflateStream.cs
- XmlElementList.cs
- TraceEventCache.cs
- PathSegmentCollection.cs
- DBConnectionString.cs
- XmlCDATASection.cs
- RelationalExpressions.cs
- TrustExchangeException.cs
- ClientData.cs
- VirtualPathProvider.cs
- WinEventHandler.cs
- HttpCookie.cs
- QueryOpcode.cs
- CustomAttributeFormatException.cs
- SecurityMessageProperty.cs
- PromptBuilder.cs
- ColorInterpolationModeValidation.cs
- LogLogRecord.cs
- SharedPersonalizationStateInfo.cs
- EventBuilder.cs
- HtmlControl.cs
- XmlLanguage.cs
- SmtpMail.cs
- HttpCookieCollection.cs
- TrustLevel.cs
- UnsafeNativeMethods.cs
- GeneralTransform.cs
- StringPropertyBuilder.cs
- ConfigurationSectionGroup.cs
- FlowLayoutPanel.cs
- Label.cs