Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Shared / MS / Internal / WeakReferenceEnumerator.cs / 1305600 / WeakReferenceEnumerator.cs
using System; using System.Collections; using System.Windows; #if WINDOWS_BASE using MS.Internal.WindowsBase; #elif PRESENTATION_CORE using MS.Internal.PresentationCore; #elif PRESENTATIONFRAMEWORK using MS.Internal.PresentationFramework; #elif DRT using MS.Internal.Drt; #else #error Attempt to use FriendAccessAllowedAttribute from an unknown assembly. using MS.Internal.YourAssemblyName; #endif // Disable pragma warnings to enable PREsharp pragmas #pragma warning disable 1634, 1691 namespace MS.Internal { ////// This allows callers to "foreach" through a WeakReferenceList. /// Each weakreference is checked for liveness and "current" /// actually returns a strong reference to the current element. /// ////// Due to the way enumerators function, this enumerator often /// holds a cached strong reference to the "Current" element. /// This should not be a problem unless the caller stops enumerating /// before the end of the list AND holds the enumerator alive forever. /// [FriendAccessAllowed] internal struct WeakReferenceListEnumerator : IEnumerator { public WeakReferenceListEnumerator( ArrayList List) { _i = 0; _List = List; _StrongReference = null; } object IEnumerator.Current { get{ return Current; } } public object Current { get { if( null == _StrongReference ) { #pragma warning suppress 6503 throw new System.InvalidOperationException(SR.Get(SRID.Enumerator_VerifyContext)); } return _StrongReference; } } public bool MoveNext() { object obj=null; while( _i < _List.Count ) { WeakReference weakRef = (WeakReference) _List[ _i++ ]; obj = weakRef.Target; if(null != obj) break; } _StrongReference = obj; return (null != obj); } public void Reset() { _i = 0; _StrongReference = null; } int _i; ArrayList _List; object _StrongReference; } } // 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
- TextComposition.cs
- FileAuthorizationModule.cs
- TypeUtils.cs
- CommandBindingCollection.cs
- __Filters.cs
- MultiAsyncResult.cs
- Matrix.cs
- Content.cs
- XmlDataDocument.cs
- AffineTransform3D.cs
- EmptyImpersonationContext.cs
- SessionStateItemCollection.cs
- peersecuritysettings.cs
- DiagnosticsConfigurationHandler.cs
- DataGridCellsPresenter.cs
- XmlSchemaSimpleContentRestriction.cs
- AttachmentCollection.cs
- KeyFrames.cs
- DataGridTextBox.cs
- BinHexEncoder.cs
- RemotingAttributes.cs
- SmiRequestExecutor.cs
- CheckBoxFlatAdapter.cs
- ExpressionWriter.cs
- CustomValidator.cs
- ImmutableCollection.cs
- MaskInputRejectedEventArgs.cs
- CodeMemberProperty.cs
- StrokeCollection.cs
- CodeConditionStatement.cs
- RolePrincipal.cs
- MachineKeySection.cs
- ListControl.cs
- XpsResource.cs
- ObfuscationAttribute.cs
- ApplyTemplatesAction.cs
- DocumentPageView.cs
- ObjectStateManager.cs
- QueryValue.cs
- CustomExpression.cs
- DataColumnMapping.cs
- LongValidatorAttribute.cs
- SR.cs
- GridViewColumn.cs
- AutomationElement.cs
- CrossSiteScriptingValidation.cs
- TextServicesManager.cs
- EntitySqlQueryCacheKey.cs
- Codec.cs
- DbDeleteCommandTree.cs
- StorageInfo.cs
- SafeEventLogReadHandle.cs
- SafeRightsManagementHandle.cs
- HyperLink.cs
- DecoderNLS.cs
- ConnectivityStatus.cs
- Expression.cs
- WebPartHelpVerb.cs
- ResourceFallbackManager.cs
- UIPermission.cs
- FilterFactory.cs
- ResourcesChangeInfo.cs
- CounterSampleCalculator.cs
- CollectionViewSource.cs
- Figure.cs
- HttpHandlerAction.cs
- DefaultTextStoreTextComposition.cs
- StylusButtonEventArgs.cs
- PropertyToken.cs
- CreationContext.cs
- TimerEventSubscription.cs
- UserControl.cs
- SchemaConstraints.cs
- DrawingCollection.cs
- DependentList.cs
- DesignerLabelAdapter.cs
- SmiRecordBuffer.cs
- ResolvedKeyFrameEntry.cs
- DbProviderFactories.cs
- ConfigXmlComment.cs
- LinearQuaternionKeyFrame.cs
- LazyLoadBehavior.cs
- BadImageFormatException.cs
- DesignerDataConnection.cs
- Aggregates.cs
- TableParaClient.cs
- PropertyEmitter.cs
- BaseTemplateBuildProvider.cs
- ReturnEventArgs.cs
- ApplicationBuildProvider.cs
- dsa.cs
- ReachPrintTicketSerializerAsync.cs
- NameGenerator.cs
- TimelineGroup.cs
- DtrList.cs
- WorkflowOperationContext.cs
- ProfileSettings.cs
- XmlSerializer.cs
- OdbcConnectionHandle.cs
- ParameterCollection.cs