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
- MeshGeometry3D.cs
- TabItemWrapperAutomationPeer.cs
- DataKey.cs
- _ShellExpression.cs
- XsltArgumentList.cs
- IItemContainerGenerator.cs
- ScriptControlDescriptor.cs
- StringKeyFrameCollection.cs
- XmlSchema.cs
- LiteralTextParser.cs
- CssTextWriter.cs
- TargetParameterCountException.cs
- CodeGenerator.cs
- ToolStripPanel.cs
- LinqDataSourceValidationException.cs
- ComponentDispatcher.cs
- PaintValueEventArgs.cs
- IsolationInterop.cs
- GifBitmapDecoder.cs
- XmlHelper.cs
- TextView.cs
- WebUtil.cs
- PrintEvent.cs
- WebControl.cs
- WindowsListBox.cs
- KnownTypeHelper.cs
- RegexMatchCollection.cs
- BitmapEffectInput.cs
- Debug.cs
- CollectionDataContract.cs
- GrammarBuilderWildcard.cs
- SqlDataSourceCommandEventArgs.cs
- ChildTable.cs
- CanExecuteRoutedEventArgs.cs
- RectConverter.cs
- SystemFonts.cs
- SqlCacheDependencyDatabase.cs
- TextCompositionEventArgs.cs
- CompilerScope.cs
- InfoCardClaim.cs
- _LocalDataStoreMgr.cs
- NavigationProperty.cs
- StylusSystemGestureEventArgs.cs
- CustomAttribute.cs
- UniformGrid.cs
- ServiceObjectContainer.cs
- AsyncOperation.cs
- Selector.cs
- WebPartManager.cs
- oledbmetadatacolumnnames.cs
- EntityKey.cs
- DashStyle.cs
- WindowsStatusBar.cs
- PrePostDescendentsWalker.cs
- ManagementClass.cs
- CoTaskMemUnicodeSafeHandle.cs
- RadioButton.cs
- SqlDependencyListener.cs
- TraceUtility.cs
- MulticastNotSupportedException.cs
- ProxyHwnd.cs
- SqlDataSourceQueryEditorForm.cs
- StylusEditingBehavior.cs
- DataGridViewComboBoxEditingControl.cs
- ScrollData.cs
- WindowsMenu.cs
- XmlRawWriter.cs
- ActivityExecutorSurrogate.cs
- DataGridViewCellStyleBuilderDialog.cs
- GenericEnumConverter.cs
- SrgsItemList.cs
- ListViewGroupItemCollection.cs
- XmlDataProvider.cs
- MeasureData.cs
- SafeSecurityHelper.cs
- DesignerCatalogPartChrome.cs
- AutomationEvent.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- ProviderCollection.cs
- DataGridViewCellLinkedList.cs
- DataGridCaption.cs
- ResourceLoader.cs
- DataGridViewRowsRemovedEventArgs.cs
- MutexSecurity.cs
- ReturnEventArgs.cs
- PageTheme.cs
- InvalidateEvent.cs
- StylusPlugInCollection.cs
- AppearanceEditorPart.cs
- NTAccount.cs
- NullableDecimalAverageAggregationOperator.cs
- ActivationServices.cs
- TaskFactory.cs
- LinqDataSourceDeleteEventArgs.cs
- BackStopAuthenticationModule.cs
- HostingEnvironmentException.cs
- SmtpTransport.cs
- StateDesignerConnector.cs
- ViewValidator.cs
- WindowsToolbarAsMenu.cs