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
- CultureMapper.cs
- ReaderContextStackData.cs
- DataGridAutoFormatDialog.cs
- FreezableDefaultValueFactory.cs
- XslTransform.cs
- InvokeBase.cs
- Message.cs
- ToggleButtonAutomationPeer.cs
- AggregateException.cs
- ButtonPopupAdapter.cs
- GPRECTF.cs
- BinaryCommonClasses.cs
- ReadOnlyDataSourceView.cs
- Variant.cs
- OpCodes.cs
- DrawItemEvent.cs
- DataGridViewComboBoxColumn.cs
- DotAtomReader.cs
- SendingRequestEventArgs.cs
- ArrayElementGridEntry.cs
- KeyPressEvent.cs
- ReferenceConverter.cs
- QuaternionAnimation.cs
- PropertyGridView.cs
- QilCloneVisitor.cs
- BevelBitmapEffect.cs
- DocumentOrderQuery.cs
- LogExtentCollection.cs
- ArrayHelper.cs
- VisualCollection.cs
- SqlDataAdapter.cs
- BrowserTree.cs
- KnownColorTable.cs
- ContentFileHelper.cs
- HttpApplicationStateBase.cs
- CopyNodeSetAction.cs
- DataGridViewTopRowAccessibleObject.cs
- XXXOnTypeBuilderInstantiation.cs
- IList.cs
- PassportPrincipal.cs
- counter.cs
- BuildProviderAppliesToAttribute.cs
- ViewKeyConstraint.cs
- Form.cs
- HierarchicalDataBoundControl.cs
- BindToObject.cs
- HttpRequest.cs
- webclient.cs
- TypeListConverter.cs
- TreeNodeBindingCollection.cs
- NameTable.cs
- TableCell.cs
- MachineKeySection.cs
- ConfigXmlDocument.cs
- BitmapCodecInfoInternal.cs
- Parser.cs
- ServiceOperationHelpers.cs
- UrlMappingCollection.cs
- CodeGeneratorOptions.cs
- WebColorConverter.cs
- XmlRootAttribute.cs
- input.cs
- CriticalFileToken.cs
- PkcsUtils.cs
- DataGridSortCommandEventArgs.cs
- MemberExpressionHelper.cs
- DoubleAnimationUsingPath.cs
- RemoteWebConfigurationHostStream.cs
- HttpHeaderCollection.cs
- FolderLevelBuildProvider.cs
- DbModificationCommandTree.cs
- ScaleTransform3D.cs
- NullReferenceException.cs
- BitSet.cs
- ErrorLog.cs
- Roles.cs
- DbException.cs
- ColumnMapVisitor.cs
- XmlSchemaGroupRef.cs
- DataStreamFromComStream.cs
- GreaterThan.cs
- ChannelOptions.cs
- ResXDataNode.cs
- ExceptionUtil.cs
- KeyPullup.cs
- PackagePartCollection.cs
- GatewayIPAddressInformationCollection.cs
- RouteData.cs
- XmlTextReader.cs
- CompiledQueryCacheEntry.cs
- SourceElementsCollection.cs
- BuildProviderCollection.cs
- TextDocumentView.cs
- ProcessThreadDesigner.cs
- MsmqHostedTransportConfiguration.cs
- Converter.cs
- FlowDocumentPaginator.cs
- XPathSingletonIterator.cs
- SessionParameter.cs
- ImageListImage.cs