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
- MenuItemBindingCollection.cs
- EventLogEntryCollection.cs
- Ticks.cs
- HelpEvent.cs
- Filter.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- DataGridViewHeaderCell.cs
- LingerOption.cs
- StyleSelector.cs
- FileChangesMonitor.cs
- MarshalDirectiveException.cs
- CellPartitioner.cs
- typedescriptorpermission.cs
- ListViewHitTestInfo.cs
- ExpandoObject.cs
- ImageAttributes.cs
- XAMLParseException.cs
- ParenthesizePropertyNameAttribute.cs
- HtmlElement.cs
- OperandQuery.cs
- DataErrorValidationRule.cs
- RewritingPass.cs
- WindowsAuthenticationModule.cs
- ProgressChangedEventArgs.cs
- ClearTypeHintValidation.cs
- handlecollector.cs
- VirtualizingPanel.cs
- AssociationSet.cs
- ComponentGuaranteesAttribute.cs
- SiteMapNodeCollection.cs
- RewritingProcessor.cs
- TableItemPattern.cs
- Crypto.cs
- ConsumerConnectionPointCollection.cs
- Context.cs
- SynchronizingStream.cs
- Module.cs
- Command.cs
- Label.cs
- PasswordRecoveryAutoFormat.cs
- GradientBrush.cs
- SystemIPv6InterfaceProperties.cs
- PictureBox.cs
- X509SecurityTokenAuthenticator.cs
- Panel.cs
- Int32KeyFrameCollection.cs
- CultureInfoConverter.cs
- EdmValidator.cs
- DataGridViewTopLeftHeaderCell.cs
- DetailsViewDeleteEventArgs.cs
- ReflectionServiceProvider.cs
- ToolStripSplitStackLayout.cs
- EntityDataSourceMemberPath.cs
- DATA_BLOB.cs
- GeometryHitTestParameters.cs
- CodeGroup.cs
- ClientSponsor.cs
- _Win32.cs
- StandardMenuStripVerb.cs
- EdmItemCollection.cs
- keycontainerpermission.cs
- SafeRightsManagementEnvironmentHandle.cs
- BindingCollection.cs
- ParameterReplacerVisitor.cs
- UnsettableComboBox.cs
- CompositeCollection.cs
- TerminatorSinks.cs
- IndependentlyAnimatedPropertyMetadata.cs
- WebPartMinimizeVerb.cs
- ConfigurationValidatorBase.cs
- BlockCollection.cs
- XamlToRtfParser.cs
- ByteBufferPool.cs
- ScriptResourceHandler.cs
- RectangleGeometry.cs
- DataException.cs
- TagMapCollection.cs
- CompilerTypeWithParams.cs
- NavigationPropertyEmitter.cs
- ExecutionPropertyManager.cs
- SoapIncludeAttribute.cs
- UdpUtility.cs
- Point3DCollectionConverter.cs
- CriticalHandle.cs
- XmlMapping.cs
- dataSvcMapFileLoader.cs
- ConsoleKeyInfo.cs
- ToolStripDropDownItem.cs
- StrokeNodeData.cs
- PropertyChangingEventArgs.cs
- BrowserCapabilitiesFactoryBase.cs
- MemberProjectedSlot.cs
- TransformationRules.cs
- WebPartConnectionsCloseVerb.cs
- TransformCollection.cs
- HttpsTransportBindingElement.cs
- RelatedPropertyManager.cs
- NonceCache.cs
- NegotiateStream.cs
- TypedRowHandler.cs