Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / CompMod / System / Diagnostics / TraceSource.cs / 1 / TraceSource.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Threading; using System.Configuration; using System.Security; using System.Security.Permissions; namespace System.Diagnostics { public class TraceSource { private static Listtracesources = new List (); private readonly TraceEventCache manager = new TraceEventCache(); private SourceSwitch internalSwitch; private TraceListenerCollection listeners; private StringDictionary attributes; private SourceLevels switchLevel; private string sourceName; internal bool _initCalled = false; // Whether we've called Initialize already. public TraceSource(string name) : this(name, SourceLevels.Off) { } public TraceSource(string name, SourceLevels defaultLevel) { if (name == null) throw new ArgumentNullException("name"); if (name.Length == 0) throw new ArgumentException("name"); sourceName = name; switchLevel = defaultLevel; // Delay load config to avoid perf (and working set) issues in retail // Add a weakreference to this source lock(tracesources) { tracesources.Add(new WeakReference(this)); } } private void Initialize() { if (!_initCalled) { lock(this) { if (_initCalled) return; SourceElementsCollection sourceElements = DiagnosticsConfiguration.Sources; if (sourceElements != null) { SourceElement sourceElement = sourceElements[sourceName]; if (sourceElement != null) { if (!String.IsNullOrEmpty(sourceElement.SwitchName)) { CreateSwitch(sourceElement.SwitchType, sourceElement.SwitchName); } else { CreateSwitch(sourceElement.SwitchType, sourceName); if (!String.IsNullOrEmpty(sourceElement.SwitchValue)) internalSwitch.Level = (SourceLevels) Enum.Parse(typeof(SourceLevels), sourceElement.SwitchValue); } listeners = sourceElement.Listeners.GetRuntimeObject(); attributes = new StringDictionary(); TraceUtils.VerifyAttributes(sourceElement.Attributes, GetSupportedAttributes(), this); attributes.contents = sourceElement.Attributes; } else NoConfigInit(); } else NoConfigInit(); _initCalled = true; } } } private void NoConfigInit() { internalSwitch = new SourceSwitch(sourceName, switchLevel.ToString()); listeners = new TraceListenerCollection(); listeners.Add(new DefaultTraceListener()); attributes = null; } [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] public void Close() { // No need to call Initialize() if (listeners != null) { // Use global lock lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Close(); } } } } public void Flush() { // No need to call Initialize() if (listeners != null) { if (TraceInternal.UseGlobalLock) { lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Flush(); } } } else { foreach (TraceListener listener in listeners) { if (!listener.IsThreadSafe) { lock (listener) { listener.Flush(); } } else { listener.Flush(); } } } } } virtual protected internal string[] GetSupportedAttributes() { return null; } internal static void RefreshAll() { lock (tracesources) { for (int i=0; i // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Threading; using System.Configuration; using System.Security; using System.Security.Permissions; namespace System.Diagnostics { public class TraceSource { private static List tracesources = new List (); private readonly TraceEventCache manager = new TraceEventCache(); private SourceSwitch internalSwitch; private TraceListenerCollection listeners; private StringDictionary attributes; private SourceLevels switchLevel; private string sourceName; internal bool _initCalled = false; // Whether we've called Initialize already. public TraceSource(string name) : this(name, SourceLevels.Off) { } public TraceSource(string name, SourceLevels defaultLevel) { if (name == null) throw new ArgumentNullException("name"); if (name.Length == 0) throw new ArgumentException("name"); sourceName = name; switchLevel = defaultLevel; // Delay load config to avoid perf (and working set) issues in retail // Add a weakreference to this source lock(tracesources) { tracesources.Add(new WeakReference(this)); } } private void Initialize() { if (!_initCalled) { lock(this) { if (_initCalled) return; SourceElementsCollection sourceElements = DiagnosticsConfiguration.Sources; if (sourceElements != null) { SourceElement sourceElement = sourceElements[sourceName]; if (sourceElement != null) { if (!String.IsNullOrEmpty(sourceElement.SwitchName)) { CreateSwitch(sourceElement.SwitchType, sourceElement.SwitchName); } else { CreateSwitch(sourceElement.SwitchType, sourceName); if (!String.IsNullOrEmpty(sourceElement.SwitchValue)) internalSwitch.Level = (SourceLevels) Enum.Parse(typeof(SourceLevels), sourceElement.SwitchValue); } listeners = sourceElement.Listeners.GetRuntimeObject(); attributes = new StringDictionary(); TraceUtils.VerifyAttributes(sourceElement.Attributes, GetSupportedAttributes(), this); attributes.contents = sourceElement.Attributes; } else NoConfigInit(); } else NoConfigInit(); _initCalled = true; } } } private void NoConfigInit() { internalSwitch = new SourceSwitch(sourceName, switchLevel.ToString()); listeners = new TraceListenerCollection(); listeners.Add(new DefaultTraceListener()); attributes = null; } [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] public void Close() { // No need to call Initialize() if (listeners != null) { // Use global lock lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Close(); } } } } public void Flush() { // No need to call Initialize() if (listeners != null) { if (TraceInternal.UseGlobalLock) { lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Flush(); } } } else { foreach (TraceListener listener in listeners) { if (!listener.IsThreadSafe) { lock (listener) { listener.Flush(); } } else { listener.Flush(); } } } } } virtual protected internal string[] GetSupportedAttributes() { return null; } internal static void RefreshAll() { lock (tracesources) { for (int i=0; i
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SizeChangedEventArgs.cs
- FontStretch.cs
- BinHexEncoder.cs
- ColumnCollection.cs
- DataMisalignedException.cs
- SQLInt16Storage.cs
- PrivilegeNotHeldException.cs
- CodeSpit.cs
- DbModificationCommandTree.cs
- ThrowHelper.cs
- UrlPath.cs
- __ComObject.cs
- sqlser.cs
- PageBuildProvider.cs
- Imaging.cs
- UnionExpr.cs
- PrivateFontCollection.cs
- RemotingServices.cs
- _ConnectOverlappedAsyncResult.cs
- CryptoHelper.cs
- RoutedCommand.cs
- _AuthenticationState.cs
- embossbitmapeffect.cs
- DiagnosticStrings.cs
- Sql8ExpressionRewriter.cs
- TypeBinaryExpression.cs
- ExpressionBuilder.cs
- EdmComplexTypeAttribute.cs
- ImageCollectionEditor.cs
- EdmTypeAttribute.cs
- WinFormsSecurity.cs
- QueryOutputWriter.cs
- RelationshipConverter.cs
- _NegoStream.cs
- ZoomPercentageConverter.cs
- XmlEntity.cs
- TextFormatterHost.cs
- XmlWriterSettings.cs
- ObjectHandle.cs
- ChangePassword.cs
- DataGridViewMethods.cs
- Soap.cs
- MexNamedPipeBindingCollectionElement.cs
- PrinterSettings.cs
- TextRunCache.cs
- SortedList.cs
- PagerSettings.cs
- DataGridItemCollection.cs
- SafeNativeMethods.cs
- TracedNativeMethods.cs
- safesecurityhelperavalon.cs
- XmlILStorageConverter.cs
- CodeRemoveEventStatement.cs
- SystemParameters.cs
- ToolStripDesignerAvailabilityAttribute.cs
- SQLCharsStorage.cs
- StoreItemCollection.cs
- ClientSponsor.cs
- PlatformCulture.cs
- OdbcEnvironmentHandle.cs
- GlobalEventManager.cs
- SubpageParagraph.cs
- WebSysDescriptionAttribute.cs
- RoleGroupCollection.cs
- ExceptionWrapper.cs
- XmlSchemaChoice.cs
- MSHTMLHostUtil.cs
- FontNamesConverter.cs
- BeginEvent.cs
- IteratorFilter.cs
- BuildProvider.cs
- WrappingXamlSchemaContext.cs
- WpfSharedXamlSchemaContext.cs
- Object.cs
- TransportationConfigurationTypeInstallComponent.cs
- SqlGenericUtil.cs
- MemberCollection.cs
- ParameterExpression.cs
- XmlSerializationWriter.cs
- PrefixHandle.cs
- NCryptNative.cs
- mansign.cs
- NullableIntMinMaxAggregationOperator.cs
- SwitchElementsCollection.cs
- XmlIlTypeHelper.cs
- _NTAuthentication.cs
- MouseButton.cs
- InfoCardSymmetricCrypto.cs
- SplineQuaternionKeyFrame.cs
- MailSettingsSection.cs
- Claim.cs
- StatusBarPanelClickEvent.cs
- CompletionCallbackWrapper.cs
- WhitespaceRuleReader.cs
- CfgSemanticTag.cs
- AnnotationAuthorChangedEventArgs.cs
- InertiaRotationBehavior.cs
- AssemblyAttributesGoHere.cs
- SortKey.cs
- DefaultBinder.cs