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
- OracleMonthSpan.cs
- WMICapabilities.cs
- Size.cs
- WindowsFormsSectionHandler.cs
- LinqDataSourceDisposeEventArgs.cs
- DataSetFieldSchema.cs
- ECDiffieHellmanPublicKey.cs
- httpserverutility.cs
- AtomicFile.cs
- BindingsCollection.cs
- BindingContext.cs
- SoapInteropTypes.cs
- ToolStripScrollButton.cs
- Properties.cs
- StrongNamePublicKeyBlob.cs
- Rules.cs
- NameSpaceExtractor.cs
- AssemblyHelper.cs
- XhtmlBasicControlAdapter.cs
- SqlDataSourceDesigner.cs
- FullTrustAssembly.cs
- TextDpi.cs
- CodeExporter.cs
- Console.cs
- Events.cs
- WebPartConnectVerb.cs
- MessageBox.cs
- PageAsyncTaskManager.cs
- CompiledQueryCacheKey.cs
- HighContrastHelper.cs
- GlyphingCache.cs
- log.cs
- SslStreamSecurityElement.cs
- arabicshape.cs
- VisualBasicSettings.cs
- PropertyRef.cs
- TextEditorDragDrop.cs
- CurrencyManager.cs
- SubMenuStyleCollection.cs
- AllMembershipCondition.cs
- OrderPreservingPipeliningSpoolingTask.cs
- StrokeNodeOperations2.cs
- ColumnMapTranslator.cs
- OracleDateTime.cs
- EnumMemberAttribute.cs
- PageParser.cs
- messageonlyhwndwrapper.cs
- TTSVoice.cs
- AncestorChangedEventArgs.cs
- PathSegment.cs
- WebPartDisplayModeEventArgs.cs
- CqlLexerHelpers.cs
- SystemSounds.cs
- EnumerableRowCollection.cs
- Renderer.cs
- SynchronizedInputAdaptor.cs
- SqlServices.cs
- StaticDataManager.cs
- CodeSnippetExpression.cs
- QueryContinueDragEvent.cs
- ContentPosition.cs
- TagPrefixCollection.cs
- _UriSyntax.cs
- ProfilePropertyNameValidator.cs
- DescendentsWalkerBase.cs
- InternalUserCancelledException.cs
- ExceptionValidationRule.cs
- XmlElement.cs
- MexNamedPipeBindingCollectionElement.cs
- FigureHelper.cs
- EdmFunctions.cs
- MemoryMappedView.cs
- AttributedMetaModel.cs
- SettingsPropertyWrongTypeException.cs
- CustomValidator.cs
- HttpCapabilitiesSectionHandler.cs
- SqlInfoMessageEvent.cs
- RepeatBehaviorConverter.cs
- ResourceReferenceExpression.cs
- HostedElements.cs
- DataSvcMapFileSerializer.cs
- Storyboard.cs
- StrokeNode.cs
- ScrollData.cs
- PngBitmapEncoder.cs
- ProtectedConfigurationSection.cs
- Translator.cs
- HttpModulesSection.cs
- ActivationServices.cs
- BuildManager.cs
- ValueSerializer.cs
- ShaderEffect.cs
- Walker.cs
- mongolianshape.cs
- DispatcherEventArgs.cs
- ConstraintManager.cs
- DbModificationCommandTree.cs
- Stackframe.cs
- ConfigPathUtility.cs
- ButtonBase.cs