Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Shared / MS / Internal / AppDomainShutdownMonitor.cs / 1 / AppDomainShutdownMonitor.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // Implement IAddDomainShutdownListener and use AppDomainShutdownMonitor // to know when the AppDomain is going down // //--------------------------------------------------------------------------- using System; using System.Diagnostics; // Assert using System.Collections.Generic; // Dictionary using System.Threading; // [ThreadStatic] namespace MS.Internal { internal interface IAppDomainShutdownListener { void NotifyShutdown(); } internal static class AppDomainShutdownMonitor { static AppDomainShutdownMonitor() { AppDomain.CurrentDomain.DomainUnload += OnShutdown; AppDomain.CurrentDomain.ProcessExit += OnShutdown; _dictionary = new Dictionary(); } public static void Add(WeakReference listener) { Debug.Assert(listener.Target != null); Debug.Assert(listener.Target is IAppDomainShutdownListener); lock (_dictionary) { if (!_shuttingDown) { _dictionary.Add(listener, listener); } } } public static void Remove(WeakReference listener) { Debug.Assert(listener.Target == null || listener.Target is IAppDomainShutdownListener); lock (_dictionary) { if (!_shuttingDown) { _dictionary.Remove(listener); } } } private static void OnShutdown(object sender, EventArgs e) { lock (_dictionary) { // Setting this to true prevents Add and Remove from modifying the list. This // way we call out without holding a lock (which would be bad) _shuttingDown = true; } foreach (WeakReference value in _dictionary.Values) { IAppDomainShutdownListener listener = value.Target as IAppDomainShutdownListener; if (listener != null) { listener.NotifyShutdown(); } } } private static Dictionary _dictionary; private static bool _shuttingDown; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // // Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // Implement IAddDomainShutdownListener and use AppDomainShutdownMonitor // to know when the AppDomain is going down // //--------------------------------------------------------------------------- using System; using System.Diagnostics; // Assert using System.Collections.Generic; // Dictionary using System.Threading; // [ThreadStatic] namespace MS.Internal { internal interface IAppDomainShutdownListener { void NotifyShutdown(); } internal static class AppDomainShutdownMonitor { static AppDomainShutdownMonitor() { AppDomain.CurrentDomain.DomainUnload += OnShutdown; AppDomain.CurrentDomain.ProcessExit += OnShutdown; _dictionary = new Dictionary(); } public static void Add(WeakReference listener) { Debug.Assert(listener.Target != null); Debug.Assert(listener.Target is IAppDomainShutdownListener); lock (_dictionary) { if (!_shuttingDown) { _dictionary.Add(listener, listener); } } } public static void Remove(WeakReference listener) { Debug.Assert(listener.Target == null || listener.Target is IAppDomainShutdownListener); lock (_dictionary) { if (!_shuttingDown) { _dictionary.Remove(listener); } } } private static void OnShutdown(object sender, EventArgs e) { lock (_dictionary) { // Setting this to true prevents Add and Remove from modifying the list. This // way we call out without holding a lock (which would be bad) _shuttingDown = true; } foreach (WeakReference value in _dictionary.Values) { IAppDomainShutdownListener listener = value.Target as IAppDomainShutdownListener; if (listener != null) { listener.NotifyShutdown(); } } } private static Dictionary _dictionary; private static bool _shuttingDown; } } // 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
- XsltFunctions.cs
- ContentDisposition.cs
- EventLogPermission.cs
- DataGridRowEventArgs.cs
- DataSourceCache.cs
- IncrementalHitTester.cs
- SqlBulkCopyColumnMappingCollection.cs
- ComEventsMethod.cs
- EntityObject.cs
- PixelFormatConverter.cs
- CacheOutputQuery.cs
- XmlSchemaSimpleContent.cs
- EventProviderBase.cs
- DataListItemEventArgs.cs
- FilterRepeater.cs
- ProxyElement.cs
- XmlEncoding.cs
- NameScopePropertyAttribute.cs
- ScrollChangedEventArgs.cs
- XmlSchemaSimpleType.cs
- FamilyTypefaceCollection.cs
- DataKeyCollection.cs
- ConfigurationValue.cs
- PriorityBinding.cs
- WindowsGrip.cs
- PersonalizationDictionary.cs
- SpeechSeg.cs
- DataColumnMapping.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- ReadOnlyHierarchicalDataSource.cs
- Screen.cs
- COM2ExtendedBrowsingHandler.cs
- _PooledStream.cs
- BindValidationContext.cs
- XmlBinaryReaderSession.cs
- SqlDuplicator.cs
- RequestStatusBarUpdateEventArgs.cs
- GenericXmlSecurityToken.cs
- Rotation3D.cs
- PropertyMapper.cs
- HtmlTableRowCollection.cs
- DesignerTransactionCloseEvent.cs
- ClientUrlResolverWrapper.cs
- TypeDescriptionProvider.cs
- DocumentSequence.cs
- OperationCanceledException.cs
- SchemaNames.cs
- DesignerAttribute.cs
- SerialPort.cs
- URL.cs
- WindowShowOrOpenTracker.cs
- ServiceModelActivity.cs
- XmlSchemaParticle.cs
- ClientOptions.cs
- JsonEnumDataContract.cs
- HttpCacheParams.cs
- ServiceNameElement.cs
- HtmlObjectListAdapter.cs
- NameTable.cs
- EncoderExceptionFallback.cs
- RadioButtonPopupAdapter.cs
- SHA256Managed.cs
- Transform3DCollection.cs
- StatusBarItemAutomationPeer.cs
- PolicyDesigner.cs
- InputBinder.cs
- BuildManagerHost.cs
- HttpProxyTransportBindingElement.cs
- ClientBuildManagerCallback.cs
- EditorReuseAttribute.cs
- BaseCodePageEncoding.cs
- HighlightComponent.cs
- PathFigureCollectionConverter.cs
- FloatUtil.cs
- ConfigurationSectionGroup.cs
- SafeBitVector32.cs
- XmlSchemaSimpleTypeRestriction.cs
- HtmlEmptyTagControlBuilder.cs
- Msec.cs
- FieldNameLookup.cs
- ScriptResourceInfo.cs
- XmlEntity.cs
- AnnotationAuthorChangedEventArgs.cs
- EntityKeyElement.cs
- CopyOnWriteList.cs
- CompatibleIComparer.cs
- NegotiateStream.cs
- XmlSchemaInferenceException.cs
- InfoCardClaimCollection.cs
- DateTimeFormat.cs
- AssemblyUtil.cs
- SelectionRangeConverter.cs
- TaskFormBase.cs
- ReadOnlyPropertyMetadata.cs
- DnsEndpointIdentity.cs
- Automation.cs
- BufferModeSettings.cs
- CallbackException.cs
- SignatureConfirmationElement.cs
- NavigationFailedEventArgs.cs