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
- ExceptionDetail.cs
- SingleKeyFrameCollection.cs
- indexingfiltermarshaler.cs
- TypeDescriptionProvider.cs
- HttpWebResponse.cs
- StringUtil.cs
- ProfileSettingsCollection.cs
- HttpApplication.cs
- CompoundFileDeflateTransform.cs
- ReachDocumentSequenceSerializer.cs
- LicenseManager.cs
- IPAddressCollection.cs
- ThemeDirectoryCompiler.cs
- GifBitmapEncoder.cs
- PersonalizationStateInfoCollection.cs
- RemotingService.cs
- LabelAutomationPeer.cs
- ConfigXmlText.cs
- BeginStoryboard.cs
- LinqDataSourceDeleteEventArgs.cs
- SqlErrorCollection.cs
- DbQueryCommandTree.cs
- CssStyleCollection.cs
- LockingPersistenceProvider.cs
- DetailsViewInsertedEventArgs.cs
- _AuthenticationState.cs
- TableLayoutPanelCellPosition.cs
- ToolStripTextBox.cs
- Timeline.cs
- WebServiceMethodData.cs
- PageCache.cs
- ListControlConvertEventArgs.cs
- AxHost.cs
- RSAPKCS1SignatureDeformatter.cs
- ValidationVisibilityAttribute.cs
- EventDescriptor.cs
- OrderingQueryOperator.cs
- InternalsVisibleToAttribute.cs
- HebrewNumber.cs
- AddressingProperty.cs
- DataGridViewEditingControlShowingEventArgs.cs
- VScrollProperties.cs
- ImageList.cs
- MDIWindowDialog.cs
- HWStack.cs
- relpropertyhelper.cs
- ParsedAttributeCollection.cs
- StringAnimationBase.cs
- XmlCDATASection.cs
- XmlArrayItemAttribute.cs
- IconConverter.cs
- ContainerParaClient.cs
- GuidelineSet.cs
- ControlBuilderAttribute.cs
- SqlGenericUtil.cs
- SafeSecurityHandles.cs
- PrintDialog.cs
- Vector.cs
- DataGridComponentEditor.cs
- ProcessStartInfo.cs
- OrderByBuilder.cs
- StateDesigner.CommentLayoutGlyph.cs
- _SSPISessionCache.cs
- Processor.cs
- DataViewListener.cs
- EpmContentDeSerializer.cs
- DelayLoadType.cs
- StackBuilderSink.cs
- SelectionRange.cs
- TextRange.cs
- SynchronizedInputHelper.cs
- RepeatInfo.cs
- TreeView.cs
- StringAnimationUsingKeyFrames.cs
- ObjectStorage.cs
- Mappings.cs
- ExpressionCopier.cs
- AutomationEvent.cs
- __ComObject.cs
- AuthorizationRuleCollection.cs
- EventManager.cs
- Normalization.cs
- WebPartConnectionsCloseVerb.cs
- XmlBindingWorker.cs
- AttributeProviderAttribute.cs
- EUCJPEncoding.cs
- ApplicationContext.cs
- ObjectQueryExecutionPlan.cs
- SizeAnimationUsingKeyFrames.cs
- TagNameToTypeMapper.cs
- FontFamily.cs
- ControlCollection.cs
- StartFileNameEditor.cs
- ActivityExecutorDelegateInfo.cs
- MasterPageBuildProvider.cs
- MultiplexingFormatMapping.cs
- NamedPipeHostedTransportConfiguration.cs
- ProfileGroupSettingsCollection.cs
- ListViewItem.cs
- GridViewRowCollection.cs