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
- DataGridRowDetailsEventArgs.cs
- ListBindingHelper.cs
- CultureMapper.cs
- ProjectionAnalyzer.cs
- WSHttpBinding.cs
- PropertyFilterAttribute.cs
- QueryCreatedEventArgs.cs
- TriState.cs
- PlatformNotSupportedException.cs
- ListBoxItemAutomationPeer.cs
- SafeNativeMethods.cs
- TranslateTransform.cs
- DocumentationServerProtocol.cs
- WebConfigurationHostFileChange.cs
- LockCookie.cs
- _TimerThread.cs
- CultureSpecificCharacterBufferRange.cs
- MatrixConverter.cs
- PersonalizableAttribute.cs
- _NegoState.cs
- DelegatingConfigHost.cs
- StringPropertyBuilder.cs
- SqlTriggerAttribute.cs
- CodeArgumentReferenceExpression.cs
- Missing.cs
- ToolStripManager.cs
- SqlBulkCopyColumnMappingCollection.cs
- DataGridViewComboBoxColumn.cs
- DefaultBinder.cs
- PropertyChangedEventArgs.cs
- Padding.cs
- GreenMethods.cs
- IIS7UserPrincipal.cs
- MaterialGroup.cs
- ProcessHostMapPath.cs
- _NestedMultipleAsyncResult.cs
- OracleString.cs
- RuntimeCompatibilityAttribute.cs
- TableDetailsCollection.cs
- StrokeNodeOperations2.cs
- TransformCryptoHandle.cs
- FixedSchema.cs
- WorkItem.cs
- COM2Enum.cs
- DataBinder.cs
- WCFBuildProvider.cs
- ObjectDataSourceChooseTypePanel.cs
- UpdateExpressionVisitor.cs
- RoutedPropertyChangedEventArgs.cs
- ReadOnlyDictionary.cs
- IdentityHolder.cs
- XhtmlBasicPanelAdapter.cs
- WebEventCodes.cs
- DataGridCaption.cs
- WorkflowDesigner.cs
- SigningDialog.cs
- PersistencePipeline.cs
- GenericEnumConverter.cs
- PackageRelationship.cs
- COM2PropertyDescriptor.cs
- DateTimeFormat.cs
- Brush.cs
- ObjectTag.cs
- BrowserTree.cs
- MSAAWinEventWrap.cs
- HGlobalSafeHandle.cs
- ChangeBlockUndoRecord.cs
- Button.cs
- Clause.cs
- UInt32Storage.cs
- ChangePassword.cs
- ContainerSelectorGlyph.cs
- XmlUtilWriter.cs
- TextSelectionHighlightLayer.cs
- FixedDocument.cs
- CodeTypeDeclarationCollection.cs
- IChannel.cs
- FloaterBaseParagraph.cs
- DataSysAttribute.cs
- TypeExtensionConverter.cs
- MembershipUser.cs
- SqlDataAdapter.cs
- EditableTreeList.cs
- ScrollChangedEventArgs.cs
- ElementNotAvailableException.cs
- ResourceProperty.cs
- BamlTreeNode.cs
- WindowsListView.cs
- ExpressionBuilder.cs
- CharUnicodeInfo.cs
- SafeRightsManagementHandle.cs
- Int32Converter.cs
- FormViewAutoFormat.cs
- NativeActivityMetadata.cs
- DSGeneratorProblem.cs
- ConditionalAttribute.cs
- ReadWriteObjectLock.cs
- EntityDataSourceReferenceGroup.cs
- ViewStateAttachedPropertyFeature.cs
- DesigntimeLicenseContext.cs