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
- OracleEncoding.cs
- DbMetaDataCollectionNames.cs
- Point4D.cs
- PageSetupDialog.cs
- ImageCreator.cs
- JoinTreeSlot.cs
- CacheVirtualItemsEvent.cs
- FunctionNode.cs
- WebPartVerbCollection.cs
- DataGridViewCheckBoxColumn.cs
- DocumentApplicationJournalEntry.cs
- MessageSmuggler.cs
- XmlArrayItemAttributes.cs
- TextFormatter.cs
- ScrollBar.cs
- ViewLoader.cs
- WmlPageAdapter.cs
- MemberHolder.cs
- BitmapImage.cs
- CharAnimationUsingKeyFrames.cs
- TransactionManager.cs
- TextRenderer.cs
- Set.cs
- ActivitiesCollection.cs
- ConsoleTraceListener.cs
- FixUpCollection.cs
- PersonalizationAdministration.cs
- AutomationEvent.cs
- PauseStoryboard.cs
- SQLDouble.cs
- RegularExpressionValidator.cs
- CodeSnippetExpression.cs
- ByteStreamMessageEncoderFactory.cs
- OptimizerPatterns.cs
- BaseProcessor.cs
- HttpWebRequestElement.cs
- GZipStream.cs
- AnnotationMap.cs
- RequestQueue.cs
- StreamHelper.cs
- SqlServices.cs
- Size.cs
- Compiler.cs
- ConfigurationLoaderException.cs
- DesignerCategoryAttribute.cs
- PortCache.cs
- ConnectionPoint.cs
- InfocardExtendedInformationCollection.cs
- DataFormats.cs
- exports.cs
- ObjectNotFoundException.cs
- CqlParserHelpers.cs
- ReceiveCompletedEventArgs.cs
- Vector3DValueSerializer.cs
- Context.cs
- HttpEncoder.cs
- ClientFormsIdentity.cs
- Pair.cs
- BridgeDataRecord.cs
- mansign.cs
- HttpListenerContext.cs
- Unit.cs
- InputReferenceExpression.cs
- VectorValueSerializer.cs
- FilePrompt.cs
- AsyncContentLoadedEventArgs.cs
- TabControl.cs
- RowToFieldTransformer.cs
- EventPropertyMap.cs
- ProviderUtil.cs
- Transform3DCollection.cs
- PagerSettings.cs
- SapiRecoInterop.cs
- InputDevice.cs
- ExtendedTransformFactory.cs
- DefaultConfirmation.cs
- DoubleCollectionValueSerializer.cs
- WebServiceReceiveDesigner.cs
- DocumentPaginator.cs
- DataSetUtil.cs
- TemplateControlBuildProvider.cs
- HtmlTable.cs
- RtType.cs
- Privilege.cs
- RawStylusInput.cs
- HierarchicalDataBoundControlAdapter.cs
- QilXmlWriter.cs
- MultiBinding.cs
- HtmlString.cs
- AdCreatedEventArgs.cs
- HttpModulesSection.cs
- InstancePersistenceException.cs
- Utils.cs
- ToolStripEditorManager.cs
- ScriptingWebServicesSectionGroup.cs
- PageTheme.cs
- ScrollableControlDesigner.cs
- OutputCacheModule.cs
- ColorKeyFrameCollection.cs
- IgnoreFlushAndCloseStream.cs