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
- Byte.cs
- EventLogPropertySelector.cs
- Semaphore.cs
- ConfigurationValue.cs
- ClientSideQueueItem.cs
- ConsoleKeyInfo.cs
- BooleanFunctions.cs
- BitmapScalingModeValidation.cs
- DocumentPaginator.cs
- Encoder.cs
- WeakReferenceKey.cs
- DocumentPage.cs
- SQLByteStorage.cs
- ConfigXmlElement.cs
- WSHttpBindingCollectionElement.cs
- _FtpControlStream.cs
- RawMouseInputReport.cs
- XamlFilter.cs
- InfoCardTraceRecord.cs
- XPathBuilder.cs
- safelink.cs
- FileIOPermission.cs
- EqualityComparer.cs
- Form.cs
- ECDiffieHellmanCng.cs
- UIElementCollection.cs
- MetadataCache.cs
- StorageSetMapping.cs
- Soap12ProtocolImporter.cs
- TempEnvironment.cs
- RSAOAEPKeyExchangeFormatter.cs
- StyleConverter.cs
- SafeWaitHandle.cs
- DbSourceParameterCollection.cs
- DefaultValueConverter.cs
- sqlnorm.cs
- ValidationPropertyAttribute.cs
- _NTAuthentication.cs
- FlowPosition.cs
- TextServicesCompartmentEventSink.cs
- BaseCodePageEncoding.cs
- ProfileParameter.cs
- ReadOnlyDataSource.cs
- CommandEventArgs.cs
- DuplicateWaitObjectException.cs
- WindowsTokenRoleProvider.cs
- SevenBitStream.cs
- TextEditorSelection.cs
- Persist.cs
- Decorator.cs
- KeyGestureConverter.cs
- mansign.cs
- HeaderPanel.cs
- MultipartContentParser.cs
- Helpers.cs
- EnumUnknown.cs
- LinqDataSourceContextEventArgs.cs
- OutputScopeManager.cs
- CapabilitiesRule.cs
- OleDbFactory.cs
- WebSysDisplayNameAttribute.cs
- EntityDesignerBuildProvider.cs
- NullableLongAverageAggregationOperator.cs
- StringValidator.cs
- CommandID.cs
- Delegate.cs
- AccessibleObject.cs
- RayHitTestParameters.cs
- SystemException.cs
- TextBoxAutoCompleteSourceConverter.cs
- ToolStripArrowRenderEventArgs.cs
- MemberInfoSerializationHolder.cs
- ScaleTransform.cs
- DocumentPaginator.cs
- MasterPageBuildProvider.cs
- MessageFormatterConverter.cs
- DrawingGroup.cs
- SimpleExpression.cs
- HttpContext.cs
- _AutoWebProxyScriptHelper.cs
- CollectionExtensions.cs
- FormViewRow.cs
- TraceUtility.cs
- CanonicalXml.cs
- Decimal.cs
- TextServicesManager.cs
- UrlMappingsModule.cs
- CodeArrayCreateExpression.cs
- DynamicValidatorEventArgs.cs
- SqlRewriteScalarSubqueries.cs
- BadImageFormatException.cs
- Thickness.cs
- PropertyMapper.cs
- SwitchLevelAttribute.cs
- PointHitTestResult.cs
- ProfilePropertySettingsCollection.cs
- ThreadExceptionEvent.cs
- Int32.cs
- DiagnosticsConfigurationHandler.cs
- QilCloneVisitor.cs