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
- Win32.cs
- WebBaseEventKeyComparer.cs
- InfoCardCryptoHelper.cs
- WebAdminConfigurationHelper.cs
- ColorKeyFrameCollection.cs
- XPathPatternBuilder.cs
- ParameterCollection.cs
- BitmapDecoder.cs
- WorkflowTimerService.cs
- DataColumnCollection.cs
- DataGridDesigner.cs
- SymLanguageVendor.cs
- DropShadowEffect.cs
- StatusStrip.cs
- EntityDataSourceColumn.cs
- StateBag.cs
- HttpServerUtilityBase.cs
- Scheduling.cs
- FixedSOMPageElement.cs
- SystemNetworkInterface.cs
- ScriptReference.cs
- InternalBase.cs
- AppLevelCompilationSectionCache.cs
- InkSerializer.cs
- CompositeScriptReference.cs
- ScriptRegistrationManager.cs
- RealizationDrawingContextWalker.cs
- PrintPreviewGraphics.cs
- CodeDefaultValueExpression.cs
- PipelineModuleStepContainer.cs
- RuntimeResourceSet.cs
- BinaryUtilClasses.cs
- InternalCache.cs
- TablePattern.cs
- EntitySqlQueryCacheKey.cs
- CompensationDesigner.cs
- SqlUtils.cs
- _NetRes.cs
- IPEndPoint.cs
- ElementAction.cs
- DefaultValueConverter.cs
- SqlConnection.cs
- DataGridComboBoxColumn.cs
- _UncName.cs
- ToolboxItemLoader.cs
- HandlerFactoryCache.cs
- WebPermission.cs
- InvalidPrinterException.cs
- ThicknessAnimationUsingKeyFrames.cs
- TemplateControlParser.cs
- EditorBrowsableAttribute.cs
- X509CertificateValidator.cs
- ChainedAsyncResult.cs
- CodeAssignStatement.cs
- NativeMethods.cs
- TabItemAutomationPeer.cs
- ProfilePropertyNameValidator.cs
- EntitySqlQueryCacheEntry.cs
- ListDictionary.cs
- PageCodeDomTreeGenerator.cs
- DoubleAnimationBase.cs
- MediaPlayerState.cs
- ExitEventArgs.cs
- Component.cs
- SatelliteContractVersionAttribute.cs
- DSACryptoServiceProvider.cs
- Matrix3D.cs
- WebBrowserSiteBase.cs
- DynamicRenderer.cs
- ContextStaticAttribute.cs
- TraceUtility.cs
- Point3DAnimationUsingKeyFrames.cs
- ToolStripDropDownItemDesigner.cs
- SurrogateSelector.cs
- FamilyMap.cs
- DataMisalignedException.cs
- LayoutManager.cs
- SqlRowUpdatingEvent.cs
- OrderedDictionary.cs
- SessionMode.cs
- StyleTypedPropertyAttribute.cs
- Timer.cs
- View.cs
- TypeDescriptorContext.cs
- Translator.cs
- MultipleViewProviderWrapper.cs
- GridViewSelectEventArgs.cs
- BrowserCapabilitiesFactoryBase.cs
- FtpRequestCacheValidator.cs
- ControlValuePropertyAttribute.cs
- Parser.cs
- ToolStripSystemRenderer.cs
- AppModelKnownContentFactory.cs
- CachedFontFace.cs
- EventLogReader.cs
- XmlSignatureManifest.cs
- PackageRelationshipSelector.cs
- XmlDataFileEditor.cs
- EnumValidator.cs
- FontCacheLogic.cs