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
- BaseDataList.cs
- ContentElementAutomationPeer.cs
- SHA384Managed.cs
- SystemEvents.cs
- HttpRequestBase.cs
- RectangleGeometry.cs
- DoubleAnimationBase.cs
- DurableServiceAttribute.cs
- XsdCachingReader.cs
- WebPartConnectionsCancelEventArgs.cs
- Message.cs
- NativeMethods.cs
- SystemIcmpV4Statistics.cs
- HttpApplication.cs
- xsdvalidator.cs
- Columns.cs
- RC2CryptoServiceProvider.cs
- AspNetSynchronizationContext.cs
- AuthenticateEventArgs.cs
- prompt.cs
- GPStream.cs
- InputElement.cs
- DecoratedNameAttribute.cs
- TextCharacters.cs
- EDesignUtil.cs
- RenderingEventArgs.cs
- arc.cs
- DataGridViewAccessibleObject.cs
- RuntimeResourceSet.cs
- CheckBoxBaseAdapter.cs
- ObjectHandle.cs
- Evidence.cs
- TemplateControlParser.cs
- latinshape.cs
- SqlEnums.cs
- AggregateNode.cs
- InfoCardMasterKey.cs
- ElementNotAvailableException.cs
- SmtpClient.cs
- StringReader.cs
- CurrencyWrapper.cs
- TableLayout.cs
- XPathScanner.cs
- SoapException.cs
- SqlFacetAttribute.cs
- Win32Exception.cs
- DataGridViewColumn.cs
- ManipulationPivot.cs
- SqlTypesSchemaImporter.cs
- PolicyException.cs
- MenuEventArgs.cs
- RichTextBoxConstants.cs
- TypeDescriptor.cs
- WebBrowser.cs
- StringKeyFrameCollection.cs
- FontCacheLogic.cs
- XmlChildEnumerator.cs
- brushes.cs
- SelectorAutomationPeer.cs
- WorkflowEventArgs.cs
- NamespaceDisplay.xaml.cs
- Imaging.cs
- FillErrorEventArgs.cs
- Resources.Designer.cs
- AssemblyAttributesGoHere.cs
- SizeChangedInfo.cs
- UInt32Converter.cs
- Renderer.cs
- ReadContentAsBinaryHelper.cs
- RelationshipDetailsRow.cs
- ObjectListItem.cs
- PropertyBuilder.cs
- GPStream.cs
- GenericRootAutomationPeer.cs
- DataDesignUtil.cs
- EnumValAlphaComparer.cs
- MediaTimeline.cs
- FileChangesMonitor.cs
- PointUtil.cs
- DataGridViewRowHeaderCell.cs
- TabItemWrapperAutomationPeer.cs
- NativeMethods.cs
- RegexTree.cs
- BroadcastEventHelper.cs
- MonthCalendar.cs
- XmlAttributeCollection.cs
- Journaling.cs
- WebException.cs
- Header.cs
- ACE.cs
- HtmlLinkAdapter.cs
- FullTextBreakpoint.cs
- Set.cs
- AutomationIdentifier.cs
- DrawingState.cs
- Setter.cs
- SiteMapNode.cs
- RawStylusSystemGestureInputReport.cs
- Header.cs
- PDBReader.cs