Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ISCIIEncoding.cs
- FileUtil.cs
- SafeBitVector32.cs
- FormViewUpdateEventArgs.cs
- ProfileSettings.cs
- CodeTypeReferenceCollection.cs
- ContentFilePart.cs
- PartialList.cs
- PersonalizableAttribute.cs
- TableProviderWrapper.cs
- WebPartDescription.cs
- FixedFlowMap.cs
- MD5.cs
- ConfigPathUtility.cs
- ContentType.cs
- ControlBuilderAttribute.cs
- SocketException.cs
- CompilerHelpers.cs
- TraceSwitch.cs
- CmsUtils.cs
- _SpnDictionary.cs
- SiteMapDataSourceView.cs
- OuterGlowBitmapEffect.cs
- FilterableAttribute.cs
- DataGridViewTopRowAccessibleObject.cs
- OutputScopeManager.cs
- SHA256.cs
- StateElementCollection.cs
- FileCodeGroup.cs
- SystemWebSectionGroup.cs
- IndicFontClient.cs
- UInt64Converter.cs
- ContentElementAutomationPeer.cs
- WebBrowser.cs
- SettingsAttributes.cs
- EventItfInfo.cs
- IISMapPath.cs
- ProcessHostMapPath.cs
- XmlDocumentFragment.cs
- DateTimeFormat.cs
- DropSource.cs
- ValidatorCompatibilityHelper.cs
- MenuAutomationPeer.cs
- ModelPropertyDescriptor.cs
- ComponentEditorPage.cs
- __TransparentProxy.cs
- SByteStorage.cs
- DataGridViewImageCell.cs
- SchemaMapping.cs
- WhitespaceRule.cs
- ModelItemCollection.cs
- SchemaElementLookUpTable.cs
- FlowDocumentPaginator.cs
- SplitContainer.cs
- StorageEntityTypeMapping.cs
- ExtendedPropertyDescriptor.cs
- StylusPointPropertyInfoDefaults.cs
- LocalizationParserHooks.cs
- SafeCoTaskMem.cs
- ExpressionTable.cs
- Material.cs
- TableSectionStyle.cs
- Attribute.cs
- Touch.cs
- BulletDecorator.cs
- Type.cs
- UnmanagedMarshal.cs
- ByteStreamMessageUtility.cs
- TextTreeTextBlock.cs
- MouseEventArgs.cs
- UnsettableComboBox.cs
- XmlRootAttribute.cs
- BaseCodePageEncoding.cs
- ProxyGenerator.cs
- FileAuthorizationModule.cs
- Compiler.cs
- TraceListener.cs
- PanelStyle.cs
- LinqDataSourceValidationException.cs
- PasswordRecovery.cs
- ErrorFormatter.cs
- DataGridRow.cs
- SendKeys.cs
- OciHandle.cs
- ConfigurationManagerInternal.cs
- DisableDpiAwarenessAttribute.cs
- FindResponse.cs
- Setter.cs
- FormViewUpdateEventArgs.cs
- RepeatBehaviorConverter.cs
- RelationshipConverter.cs
- MenuItemStyle.cs
- EntityDataSourceSelectedEventArgs.cs
- RijndaelManaged.cs
- CompensationParticipant.cs
- SqlCommandSet.cs
- DoubleKeyFrameCollection.cs
- SoapFault.cs
- Quaternion.cs
- FigureParagraph.cs