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
- LZCodec.cs
- TextOutput.cs
- LinqExpressionNormalizer.cs
- Lookup.cs
- RepeaterCommandEventArgs.cs
- StorageMappingItemLoader.cs
- StreamAsIStream.cs
- CustomSignedXml.cs
- RetriableClipboard.cs
- Underline.cs
- UnescapedXmlDiagnosticData.cs
- WebBaseEventKeyComparer.cs
- PropertyEntry.cs
- EdmEntityTypeAttribute.cs
- EmptyStringExpandableObjectConverter.cs
- EntityTypeBase.cs
- TCPClient.cs
- ListBox.cs
- DuplicateWaitObjectException.cs
- FormViewUpdateEventArgs.cs
- FamilyCollection.cs
- SchemeSettingElementCollection.cs
- ProcessThreadCollection.cs
- ServiceModelEnhancedConfigurationElementCollection.cs
- ImageAutomationPeer.cs
- TreeNodeBinding.cs
- SettingsProperty.cs
- Int64Animation.cs
- RectangleGeometry.cs
- Unit.cs
- SplitterCancelEvent.cs
- UpdateManifestForBrowserApplication.cs
- CompiledWorkflowDefinitionContext.cs
- FacetValueContainer.cs
- GeneralTransform.cs
- BitmapPalettes.cs
- WeakReference.cs
- ObjectComplexPropertyMapping.cs
- DropSourceBehavior.cs
- AttributeAction.cs
- ScriptManager.cs
- RSAPKCS1KeyExchangeFormatter.cs
- Propagator.ExtentPlaceholderCreator.cs
- ObjectDataSourceSelectingEventArgs.cs
- WebScriptMetadataInstanceContextProvider.cs
- UserInitiatedNavigationPermission.cs
- StyleHelper.cs
- HwndTarget.cs
- HttpModuleCollection.cs
- AutomationPattern.cs
- FixedHighlight.cs
- EventProviderBase.cs
- EntityClientCacheEntry.cs
- XmlNodeList.cs
- RegisteredDisposeScript.cs
- DataGridViewCellStyleEditor.cs
- ParameterCollection.cs
- RegexStringValidator.cs
- OverrideMode.cs
- DataTableReaderListener.cs
- ObjectDataSourceFilteringEventArgs.cs
- EntityType.cs
- CapabilitiesAssignment.cs
- AutomationPropertyInfo.cs
- base64Transforms.cs
- ModuleConfigurationInfo.cs
- DataGridViewElement.cs
- ReadOnlyDataSource.cs
- CategoryState.cs
- ImageClickEventArgs.cs
- RowCache.cs
- MailMessageEventArgs.cs
- DocumentEventArgs.cs
- Application.cs
- PassportPrincipal.cs
- ConfigurationSection.cs
- GridViewPageEventArgs.cs
- XmlElementAttributes.cs
- MessageSecurityOverMsmqElement.cs
- GridViewEditEventArgs.cs
- Variable.cs
- Point.cs
- SQLResource.cs
- XsdValidatingReader.cs
- DesignerOptionService.cs
- EdgeModeValidation.cs
- IntranetCredentialPolicy.cs
- ManipulationLogic.cs
- WebEventTraceProvider.cs
- CultureTable.cs
- DecimalAnimationBase.cs
- SchemaAttDef.cs
- RadioButton.cs
- CustomValidator.cs
- SecureEnvironment.cs
- OpCodes.cs
- RecordManager.cs
- TemplateBindingExpression.cs
- ConnectionStringsSection.cs
- LinqToSqlWrapper.cs