Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- EntityDataSourceViewSchema.cs
- ObjectQueryExecutionPlan.cs
- ColumnTypeConverter.cs
- HWStack.cs
- Lease.cs
- CodeSubDirectory.cs
- StylusCaptureWithinProperty.cs
- ExtenderProvidedPropertyAttribute.cs
- ImportCatalogPart.cs
- ReadWriteSpinLock.cs
- IntSecurity.cs
- RegexWriter.cs
- ViewStateException.cs
- SerializationAttributes.cs
- ExpressionBuilderCollection.cs
- DialogWindow.cs
- MouseButtonEventArgs.cs
- SamlAuthenticationClaimResource.cs
- OperationAbortedException.cs
- StateDesigner.cs
- SchemaImporterExtension.cs
- Internal.cs
- WebPartMinimizeVerb.cs
- DocumentSchemaValidator.cs
- DeliveryStrategy.cs
- DataService.cs
- ProgramNode.cs
- ConfigXmlText.cs
- CustomPopupPlacement.cs
- DupHandleConnectionReader.cs
- Rotation3DAnimation.cs
- CommunicationObject.cs
- InputMethod.cs
- DataPointer.cs
- ScriptResourceHandler.cs
- BuildResultCache.cs
- LabelDesigner.cs
- EventManager.cs
- XmlSchemaAnnotation.cs
- HttpException.cs
- FamilyMap.cs
- IUnknownConstantAttribute.cs
- TextRunTypographyProperties.cs
- Operators.cs
- FileAuthorizationModule.cs
- DataGridView.cs
- GetPageCompletedEventArgs.cs
- CommonDialog.cs
- ButtonPopupAdapter.cs
- PageParser.cs
- CFStream.cs
- ManagementOptions.cs
- BuilderPropertyEntry.cs
- ListSortDescriptionCollection.cs
- GridViewColumnHeader.cs
- Condition.cs
- BridgeDataReader.cs
- CompModSwitches.cs
- _BasicClient.cs
- TrackingExtract.cs
- OdbcInfoMessageEvent.cs
- LiteralControl.cs
- SQLCharsStorage.cs
- XmlAnyAttributeAttribute.cs
- TagPrefixInfo.cs
- Convert.cs
- BuildProviderAppliesToAttribute.cs
- COM2IProvidePropertyBuilderHandler.cs
- TemplateComponentConnector.cs
- Completion.cs
- HtmlToClrEventProxy.cs
- RowsCopiedEventArgs.cs
- TemplateEditingService.cs
- ColumnWidthChangingEvent.cs
- AudioFileOut.cs
- PolicyException.cs
- WarningException.cs
- SimpleLine.cs
- RequestResponse.cs
- SQLDoubleStorage.cs
- QEncodedStream.cs
- SubMenuStyleCollection.cs
- BaseTemplateCodeDomTreeGenerator.cs
- Setter.cs
- VarInfo.cs
- Attributes.cs
- PolicyConversionContext.cs
- GPPOINT.cs
- WebExceptionStatus.cs
- TemplateXamlParser.cs
- ToggleButton.cs
- DeleteBookmarkScope.cs
- cache.cs
- ListViewUpdatedEventArgs.cs
- assemblycache.cs
- WebServiceErrorEvent.cs
- XmlQueryStaticData.cs
- UnmanagedHandle.cs
- COM2PropertyPageUITypeConverter.cs
- AnonymousIdentificationSection.cs