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
- ContextQuery.cs
- OutputScopeManager.cs
- CorrelationManager.cs
- ComplexTypeEmitter.cs
- BamlBinaryReader.cs
- OutputChannel.cs
- RowUpdatingEventArgs.cs
- PairComparer.cs
- ContentIterators.cs
- IsolationInterop.cs
- ActiveXHelper.cs
- TreeNodeStyleCollection.cs
- ScriptReferenceBase.cs
- Compensation.cs
- RequestChannel.cs
- WmlCalendarAdapter.cs
- UdpAnnouncementEndpoint.cs
- ClipboardData.cs
- ClaimTypes.cs
- PrimitiveXmlSerializers.cs
- SiteMapNodeCollection.cs
- StaticResourceExtension.cs
- XmlNamespaceManager.cs
- SystemResourceKey.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- IBuiltInEvidence.cs
- TextEndOfLine.cs
- InfoCardCryptoHelper.cs
- ServiceBehaviorElementCollection.cs
- DrawingGroup.cs
- BinaryCommonClasses.cs
- securitycriticaldataClass.cs
- LogicalTreeHelper.cs
- Visual3DCollection.cs
- NetworkStream.cs
- Error.cs
- XmlIncludeAttribute.cs
- DataServiceRequest.cs
- DispatcherHooks.cs
- MultiDataTrigger.cs
- Pair.cs
- SmuggledIUnknown.cs
- RoutingSection.cs
- HttpContext.cs
- HttpValueCollection.cs
- AssemblyNameProxy.cs
- ItemsPresenter.cs
- CorrelationService.cs
- TraceContextEventArgs.cs
- EmptyReadOnlyDictionaryInternal.cs
- RequestContextBase.cs
- StretchValidation.cs
- EditorZoneBase.cs
- KerberosTicketHashIdentifierClause.cs
- RedistVersionInfo.cs
- JapaneseLunisolarCalendar.cs
- KeyEvent.cs
- ParameterModifier.cs
- ReflectionServiceProvider.cs
- SelectionList.cs
- UnknownBitmapDecoder.cs
- ParagraphResult.cs
- IsolatedStoragePermission.cs
- CompileXomlTask.cs
- DbConnectionClosed.cs
- TransactionFilter.cs
- PhonemeEventArgs.cs
- followingquery.cs
- __Error.cs
- WebDescriptionAttribute.cs
- Encoder.cs
- sortedlist.cs
- Int32Collection.cs
- TraceLog.cs
- OutOfProcStateClientManager.cs
- RequestNavigateEventArgs.cs
- OracleCommandSet.cs
- cryptoapiTransform.cs
- MethodExecutor.cs
- ChildDocumentBlock.cs
- NullableDecimalMinMaxAggregationOperator.cs
- FixedNode.cs
- NotEqual.cs
- OleDbError.cs
- ListViewInsertedEventArgs.cs
- Hashtable.cs
- ServiceHostFactory.cs
- FormViewCommandEventArgs.cs
- RangeExpression.cs
- InputLanguage.cs
- ScriptReferenceEventArgs.cs
- DataGridViewCellStyle.cs
- ScriptRef.cs
- DesignerDataSourceView.cs
- DiagnosticSection.cs
- OdbcErrorCollection.cs
- XmlReflectionMember.cs
- CacheEntry.cs
- UnknownMessageReceivedEventArgs.cs
- StringInfo.cs