Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ContextQuery.cs
- TextAction.cs
- FloaterParaClient.cs
- DataBindingList.cs
- ProjectionNode.cs
- TitleStyle.cs
- TreeBuilder.cs
- WaitForChangedResult.cs
- LiteralControl.cs
- ImplicitInputBrush.cs
- FileFormatException.cs
- SchemaCollectionPreprocessor.cs
- ContextMenuService.cs
- TabControlAutomationPeer.cs
- ObjectCloneHelper.cs
- AppDomainProtocolHandler.cs
- UnsafeNativeMethodsPenimc.cs
- PhysicalAddress.cs
- DebugView.cs
- MultiPageTextView.cs
- FlagsAttribute.cs
- MessageBox.cs
- SafeFindHandle.cs
- SessionPageStatePersister.cs
- ViewPort3D.cs
- TreeViewAutomationPeer.cs
- AssemblyBuilderData.cs
- EntityDataSourceSelectedEventArgs.cs
- ContainerSelectorBehavior.cs
- CodeArrayCreateExpression.cs
- HttpConfigurationContext.cs
- RowCache.cs
- SqlServer2KCompatibilityAnnotation.cs
- CryptoStream.cs
- Point4D.cs
- ScrollChrome.cs
- PersonalizationStateInfoCollection.cs
- RangeBase.cs
- MessageBox.cs
- EnvironmentPermission.cs
- ObservableCollection.cs
- ScrollChrome.cs
- RegexEditorDialog.cs
- BuildProviderUtils.cs
- DataRowChangeEvent.cs
- VisualStates.cs
- DataGridViewRowCollection.cs
- InputProcessorProfilesLoader.cs
- PagePropertiesChangingEventArgs.cs
- XmlWrappingReader.cs
- CommandConverter.cs
- EventListener.cs
- SqlCharStream.cs
- FileClassifier.cs
- ApplicationGesture.cs
- SqlTrackingService.cs
- WCFBuildProvider.cs
- MemberHolder.cs
- FileLevelControlBuilderAttribute.cs
- DataGridViewDataErrorEventArgs.cs
- JapaneseCalendar.cs
- securitymgrsite.cs
- ConfigXmlDocument.cs
- XmlMemberMapping.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- DesignerActionPanel.cs
- SelectionHighlightInfo.cs
- PrintingPermission.cs
- EntitySetBase.cs
- GroupItem.cs
- SchemaTableColumn.cs
- MenuItemBindingCollection.cs
- ObsoleteAttribute.cs
- TypeConstant.cs
- CacheVirtualItemsEvent.cs
- CharEntityEncoderFallback.cs
- CodeMemberField.cs
- Int32Collection.cs
- RenderOptions.cs
- HttpPostProtocolReflector.cs
- ComponentConverter.cs
- EnumValidator.cs
- TraceHwndHost.cs
- CodeStatement.cs
- IndexerHelper.cs
- HandlerFactoryCache.cs
- CheckedPointers.cs
- BitmapDecoder.cs
- ElementMarkupObject.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- TabItemAutomationPeer.cs
- CompositeKey.cs
- InstanceNormalEvent.cs
- DataGridViewAdvancedBorderStyle.cs
- MappingException.cs
- ProcessThread.cs
- SystemDiagnosticsSection.cs
- Compress.cs
- ObjectPersistData.cs
- AnnotationStore.cs