Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- StringDictionary.cs
- XmlEventCache.cs
- TransactionContextValidator.cs
- ScrollEventArgs.cs
- SyndicationSerializer.cs
- WmlValidatorAdapter.cs
- XmlMtomReader.cs
- Application.cs
- Scene3D.cs
- Environment.cs
- AssemblyNameUtility.cs
- DeleteMemberBinder.cs
- TrackingWorkflowEventArgs.cs
- Transform3D.cs
- SeverityFilter.cs
- XPathNodeIterator.cs
- StackOverflowException.cs
- Events.cs
- BitmapFrame.cs
- dtdvalidator.cs
- MouseBinding.cs
- RouteItem.cs
- StorageFunctionMapping.cs
- TrustManagerPromptUI.cs
- DynamicHyperLink.cs
- CodeCommentStatement.cs
- FixedSOMTable.cs
- SmiRecordBuffer.cs
- AspNetHostingPermission.cs
- InputScope.cs
- Exception.cs
- Operators.cs
- QueryMath.cs
- EntityDataSourceColumn.cs
- SqlDataSourceEnumerator.cs
- JavaScriptSerializer.cs
- DoubleLink.cs
- OdbcParameter.cs
- ToolStripDropDown.cs
- BasicHttpMessageSecurity.cs
- Form.cs
- SurrogateDataContract.cs
- InternalException.cs
- ManagementInstaller.cs
- HostingEnvironment.cs
- datacache.cs
- GridViewUpdatedEventArgs.cs
- Effect.cs
- TaskDesigner.cs
- Operators.cs
- MsdtcClusterUtils.cs
- XmlSchemaInferenceException.cs
- RemoteWebConfigurationHostStream.cs
- _SafeNetHandles.cs
- SerializationInfoEnumerator.cs
- ComplexBindingPropertiesAttribute.cs
- GridItemProviderWrapper.cs
- FormsAuthentication.cs
- OleDbPermission.cs
- BasicAsyncResult.cs
- ValueChangedEventManager.cs
- DetailsViewPageEventArgs.cs
- BatchParser.cs
- SByteConverter.cs
- PageThemeCodeDomTreeGenerator.cs
- PiiTraceSource.cs
- OrderablePartitioner.cs
- IgnoreSectionHandler.cs
- CodeLinePragma.cs
- typedescriptorpermission.cs
- CustomServiceCredentials.cs
- MouseCaptureWithinProperty.cs
- _BaseOverlappedAsyncResult.cs
- OTFRasterizer.cs
- NativeMethods.cs
- HandledMouseEvent.cs
- ToolboxBitmapAttribute.cs
- XamlWriter.cs
- RoleManagerSection.cs
- OptimalTextSource.cs
- BindingNavigatorDesigner.cs
- HttpTransportElement.cs
- TiffBitmapDecoder.cs
- CubicEase.cs
- EditingCoordinator.cs
- DataGridCaption.cs
- SmuggledIUnknown.cs
- XPathDocumentBuilder.cs
- CodeValidator.cs
- SendingRequestEventArgs.cs
- storepermissionattribute.cs
- XmlAttributeProperties.cs
- GuidelineSet.cs
- FrameSecurityDescriptor.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- BrowserCapabilitiesCodeGenerator.cs
- TextRunProperties.cs
- HttpException.cs
- DirtyTextRange.cs
- ChineseLunisolarCalendar.cs