Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Shared / MS / Internal / AppDomainShutdownMonitor.cs / 1305600 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AutoSizeToolBoxItem.cs
- SelectManyQueryOperator.cs
- LightweightCodeGenerator.cs
- HttpProfileBase.cs
- SQLBinaryStorage.cs
- TextRunCache.cs
- _NetworkingPerfCounters.cs
- InputDevice.cs
- Interop.cs
- SelectorAutomationPeer.cs
- ViewGenerator.cs
- PartitionResolver.cs
- SynchronizationContext.cs
- Scripts.cs
- StringAnimationUsingKeyFrames.cs
- OrderedDictionary.cs
- StagingAreaInputItem.cs
- CompensateDesigner.cs
- NextPreviousPagerField.cs
- XmlTypeAttribute.cs
- RemoteWebConfigurationHostServer.cs
- SQLCharsStorage.cs
- NamespaceExpr.cs
- ObjRef.cs
- HttpCapabilitiesBase.cs
- GroupBoxRenderer.cs
- ContainerFilterService.cs
- ItemList.cs
- BitmapScalingModeValidation.cs
- DbProviderFactoriesConfigurationHandler.cs
- TableRowGroup.cs
- MembershipSection.cs
- FillRuleValidation.cs
- WindowsNonControl.cs
- AmbientValueAttribute.cs
- TextContainerHelper.cs
- SqlNamer.cs
- ManualResetEvent.cs
- DataObjectAttribute.cs
- GlyphRunDrawing.cs
- PeerNeighborManager.cs
- MonthChangedEventArgs.cs
- Debugger.cs
- CodeCommentStatement.cs
- ToggleButtonAutomationPeer.cs
- SQLByte.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- WindowsStatusBar.cs
- CodeCastExpression.cs
- IndependentlyAnimatedPropertyMetadata.cs
- _SingleItemRequestCache.cs
- XmlNullResolver.cs
- HtmlTableCell.cs
- CryptoStream.cs
- ExpandCollapseProviderWrapper.cs
- webeventbuffer.cs
- EnumMember.cs
- Config.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- WebRequestModuleElementCollection.cs
- ActivitiesCollection.cs
- DictionarySectionHandler.cs
- MultiView.cs
- Misc.cs
- Partitioner.cs
- ControlHelper.cs
- XpsFilter.cs
- XmlnsCache.cs
- SymbolResolver.cs
- BrowserDefinition.cs
- SoapInteropTypes.cs
- FormsAuthenticationEventArgs.cs
- ValidatedControlConverter.cs
- HostedTransportConfigurationManager.cs
- RegexCode.cs
- MethodImplAttribute.cs
- MetadataReference.cs
- ButtonChrome.cs
- DetailsViewCommandEventArgs.cs
- Process.cs
- FilePresentation.cs
- FontUnit.cs
- XmlSchemaElement.cs
- BaseTemplateBuildProvider.cs
- ObjectHandle.cs
- RectangleGeometry.cs
- HotSpotCollection.cs
- ProxyFragment.cs
- cache.cs
- UnitySerializationHolder.cs
- IconBitmapDecoder.cs
- RtfControlWordInfo.cs
- HMAC.cs
- GlobalProxySelection.cs
- VerificationException.cs
- VariableDesigner.xaml.cs
- FontSource.cs
- Fonts.cs
- StreamWithDictionary.cs
- DesignerVerbCollection.cs