Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- VariableQuery.cs
- AutomationAttributeInfo.cs
- TargetControlTypeCache.cs
- XmlNamespaceMappingCollection.cs
- EntityDataSourceViewSchema.cs
- CrossAppDomainChannel.cs
- SID.cs
- Typeface.cs
- AccessText.cs
- ConnectionsZoneAutoFormat.cs
- ClipboardData.cs
- DateTimeValueSerializer.cs
- SafeHandles.cs
- OrderedParallelQuery.cs
- PeoplePickerWrapper.cs
- PingReply.cs
- ByteRangeDownloader.cs
- GeneralEndpointIdentity.cs
- FigureParagraph.cs
- Suspend.cs
- ColorDialog.cs
- MailAddressParser.cs
- ButtonChrome.cs
- VisualStyleTypesAndProperties.cs
- _NetRes.cs
- SpeechSynthesizer.cs
- XmlAttributeAttribute.cs
- AssemblyResolver.cs
- AttachedAnnotation.cs
- ColumnMapProcessor.cs
- TypedTableBase.cs
- FormViewUpdateEventArgs.cs
- ConfigXmlElement.cs
- QilIterator.cs
- QilTernary.cs
- PageOutputQuality.cs
- DynamicFilter.cs
- ExpressionVisitorHelpers.cs
- SafeTokenHandle.cs
- TextSelectionHelper.cs
- MenuItem.cs
- MultilineStringConverter.cs
- VisualStyleInformation.cs
- ToolStripOverflowButton.cs
- Win32Native.cs
- UdpChannelListener.cs
- ListDesigner.cs
- RowUpdatedEventArgs.cs
- InternalsVisibleToAttribute.cs
- XsltQilFactory.cs
- SecuritySessionFilter.cs
- NumberFormatInfo.cs
- RawStylusInputCustomData.cs
- SettingsProviderCollection.cs
- MetadataItemSerializer.cs
- ServiceThrottle.cs
- JsonCollectionDataContract.cs
- DesignerAutoFormatCollection.cs
- SapiRecoInterop.cs
- Win32MouseDevice.cs
- OleDbParameter.cs
- CodeFieldReferenceExpression.cs
- MemoryFailPoint.cs
- TextTreeExtractElementUndoUnit.cs
- WhitespaceRuleLookup.cs
- WebBrowser.cs
- MultipartContentParser.cs
- XPathNode.cs
- HMACMD5.cs
- GetImportFileNameRequest.cs
- ImmutableObjectAttribute.cs
- MessageBox.cs
- WsdlImporterElementCollection.cs
- HScrollProperties.cs
- WindowCollection.cs
- DefaultPropertyAttribute.cs
- ObjectQuery.cs
- HtmlToClrEventProxy.cs
- SingleObjectCollection.cs
- SHA512CryptoServiceProvider.cs
- CachedFontFace.cs
- XPathNodeHelper.cs
- Operators.cs
- DescriptionAttribute.cs
- XmlQueryOutput.cs
- TaskHelper.cs
- MergablePropertyAttribute.cs
- CryptoProvider.cs
- MappingModelBuildProvider.cs
- SystemNetworkInterface.cs
- PageCanvasSize.cs
- MdiWindowListStrip.cs
- RawTextInputReport.cs
- BrushConverter.cs
- SQLMoney.cs
- SoapHeaderException.cs
- CompositeDuplexBindingElementImporter.cs
- SequentialWorkflowRootDesigner.cs
- AppSettingsExpressionBuilder.cs
- LicenseContext.cs