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
- EmbeddedObject.cs
- GridViewCellAutomationPeer.cs
- DaylightTime.cs
- CssStyleCollection.cs
- KnownTypesHelper.cs
- Selection.cs
- AddInContractAttribute.cs
- LinqDataSource.cs
- MouseBinding.cs
- Comparer.cs
- PrincipalPermission.cs
- RegisteredHiddenField.cs
- MappingSource.cs
- SettingsPropertyValue.cs
- BaseDataBoundControl.cs
- ColorBlend.cs
- NonVisualControlAttribute.cs
- ConfigurationElementCollection.cs
- MetadataStore.cs
- DrawListViewItemEventArgs.cs
- XmlProcessingInstruction.cs
- HtmlGenericControl.cs
- ExistsInCollection.cs
- TraceXPathNavigator.cs
- MemoryMappedFile.cs
- DataGridViewLinkColumn.cs
- ConfigXmlDocument.cs
- DeleteMemberBinder.cs
- NavigatorInvalidBodyAccessException.cs
- COM2ExtendedBrowsingHandler.cs
- DataGridViewCellParsingEventArgs.cs
- ByteKeyFrameCollection.cs
- TextReader.cs
- RecognizerBase.cs
- NullPackagingPolicy.cs
- DataGridTextColumn.cs
- QuaternionValueSerializer.cs
- NameSpaceExtractor.cs
- ApplicationTrust.cs
- SafeMILHandleMemoryPressure.cs
- VerificationAttribute.cs
- HandlerBase.cs
- SystemResources.cs
- Empty.cs
- Encoder.cs
- TextEditorTyping.cs
- CanonicalFontFamilyReference.cs
- QualificationDataAttribute.cs
- basecomparevalidator.cs
- ConnectionsZone.cs
- ComplexObject.cs
- SoapMessage.cs
- SQLMembershipProvider.cs
- BatchParser.cs
- EditorZoneDesigner.cs
- FontUnitConverter.cs
- MergeFailedEvent.cs
- XmlKeywords.cs
- SapiInterop.cs
- DataSysAttribute.cs
- WebCodeGenerator.cs
- sqlstateclientmanager.cs
- NameValueFileSectionHandler.cs
- SpeechSeg.cs
- XmlResolver.cs
- Queue.cs
- SinglePageViewer.cs
- BoundsDrawingContextWalker.cs
- InputReportEventArgs.cs
- ColorBlend.cs
- CodeBinaryOperatorExpression.cs
- CqlParser.cs
- DataGridClipboardCellContent.cs
- FixedNode.cs
- HtmlInputButton.cs
- ListViewItem.cs
- Menu.cs
- FileFormatException.cs
- CuspData.cs
- EventDescriptor.cs
- WebBrowser.cs
- PackageProperties.cs
- ObjectSecurityT.cs
- FileDialogPermission.cs
- SqlConnectionPoolGroupProviderInfo.cs
- WorkflowItemPresenter.cs
- FixedPageProcessor.cs
- ADRoleFactory.cs
- VariableModifiersHelper.cs
- OlePropertyStructs.cs
- VideoDrawing.cs
- ResourceManagerWrapper.cs
- DragCompletedEventArgs.cs
- PointCollectionConverter.cs
- BinaryMethodMessage.cs
- PackageRelationshipSelector.cs
- XmlBinaryReader.cs
- GridViewEditEventArgs.cs
- FileSystemEventArgs.cs
- TriggerCollection.cs