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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SqlUserDefinedAggregateAttribute.cs
- PageContentAsyncResult.cs
- ExtractorMetadata.cs
- ToolboxCategoryItems.cs
- HostedBindingBehavior.cs
- LookupTables.cs
- DeploymentSection.cs
- WaitingCursor.cs
- ManifestSignedXml.cs
- OraclePermissionAttribute.cs
- AtomicFile.cs
- WebPartsPersonalizationAuthorization.cs
- ToolboxDataAttribute.cs
- PersonalizationProviderHelper.cs
- HtmlForm.cs
- EmptyControlCollection.cs
- CharacterShapingProperties.cs
- XmlSchemaSearchPattern.cs
- ListMarkerLine.cs
- TabControlEvent.cs
- XamlBuildTaskServices.cs
- InternalTypeHelper.cs
- SortDescription.cs
- LoginName.cs
- DefaultEventAttribute.cs
- ExtendedPropertyCollection.cs
- XmlAutoDetectWriter.cs
- ClickablePoint.cs
- Scanner.cs
- DataGridViewCellMouseEventArgs.cs
- CallbackTimeoutsElement.cs
- DiscoveryVersionConverter.cs
- SerializationEventsCache.cs
- CodeObjectCreateExpression.cs
- MobileSysDescriptionAttribute.cs
- ListBox.cs
- AssemblyCollection.cs
- CuspData.cs
- GifBitmapEncoder.cs
- WebPartAuthorizationEventArgs.cs
- ELinqQueryState.cs
- MediaContext.cs
- TraceSection.cs
- Popup.cs
- SelectingProviderEventArgs.cs
- TcpAppDomainProtocolHandler.cs
- Math.cs
- SerializationFieldInfo.cs
- ErrorEventArgs.cs
- LiteralControl.cs
- ListItemParagraph.cs
- Timer.cs
- SectionVisual.cs
- XmlSchemaObject.cs
- WebMethodAttribute.cs
- TargetException.cs
- SessionPageStateSection.cs
- InkCanvasSelection.cs
- sqlnorm.cs
- EncoderParameters.cs
- Cursors.cs
- FormsAuthenticationConfiguration.cs
- wmiprovider.cs
- WebRequest.cs
- EncoderNLS.cs
- StateItem.cs
- DialogResultConverter.cs
- XPathDocumentBuilder.cs
- Helper.cs
- Latin1Encoding.cs
- GetRecipientListRequest.cs
- CompositeDispatchFormatter.cs
- COM2ExtendedUITypeEditor.cs
- MediaElementAutomationPeer.cs
- EntityDataReader.cs
- ConsoleKeyInfo.cs
- SiteMap.cs
- NotificationContext.cs
- FieldTemplateUserControl.cs
- DataGridTable.cs
- AlternateView.cs
- SafeFileMapViewHandle.cs
- Win32Native.cs
- URLIdentityPermission.cs
- TextLineResult.cs
- CodeConstructor.cs
- printdlgexmarshaler.cs
- ModuleElement.cs
- SelectionProviderWrapper.cs
- InkPresenterAutomationPeer.cs
- IndependentlyAnimatedPropertyMetadata.cs
- DataKey.cs
- ConfigurationElement.cs
- Point3DCollectionConverter.cs
- EdmItemError.cs
- ContainerParagraph.cs
- ListViewItem.cs
- connectionpool.cs
- basevalidator.cs
- SizeFConverter.cs