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
- HttpRuntimeSection.cs
- CodePageEncoding.cs
- XmlUtil.cs
- ButtonBaseAdapter.cs
- DateTimeFormat.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- URIFormatException.cs
- KeyEvent.cs
- TextServicesDisplayAttributePropertyRanges.cs
- RealizationDrawingContextWalker.cs
- newinstructionaction.cs
- DocumentAutomationPeer.cs
- PrintDialogDesigner.cs
- ControlBuilder.cs
- Version.cs
- ArrayEditor.cs
- StateWorkerRequest.cs
- WebBrowser.cs
- HtmlFormAdapter.cs
- RecipientInfo.cs
- SoapElementAttribute.cs
- RequestFactory.cs
- DebuggerService.cs
- ConfigXmlSignificantWhitespace.cs
- SchemaContext.cs
- CaseInsensitiveComparer.cs
- TextSearch.cs
- ConfigsHelper.cs
- ComponentDispatcherThread.cs
- CompiledELinqQueryState.cs
- XmlMtomWriter.cs
- FixedLineResult.cs
- PersonalizationStateInfoCollection.cs
- FontDifferentiator.cs
- SqlDataAdapter.cs
- ResourceProviderFactory.cs
- x509utils.cs
- UriExt.cs
- DES.cs
- OpCodes.cs
- ConfigurationManager.cs
- ResponseStream.cs
- CodeGeneratorAttribute.cs
- StackBuilderSink.cs
- DecimalFormatter.cs
- IntSecurity.cs
- CodeAccessSecurityEngine.cs
- Evidence.cs
- _LocalDataStore.cs
- SerializationEventsCache.cs
- SystemColorTracker.cs
- RemotingSurrogateSelector.cs
- TemplateControlBuildProvider.cs
- ElementUtil.cs
- Track.cs
- QueryableFilterRepeater.cs
- Int32Animation.cs
- GeneralTransform3DTo2D.cs
- LabelAutomationPeer.cs
- EventSourceCreationData.cs
- BuildProviderUtils.cs
- BitmapEffectOutputConnector.cs
- AttributeEmitter.cs
- XmlDocumentType.cs
- LexicalChunk.cs
- SizeConverter.cs
- SourceChangedEventArgs.cs
- sortedlist.cs
- RawMouseInputReport.cs
- SqlClientPermission.cs
- KeyedCollection.cs
- ImageSource.cs
- SignatureHelper.cs
- Helper.cs
- SystemKeyConverter.cs
- IdentitySection.cs
- SqlProcedureAttribute.cs
- RootBrowserWindowAutomationPeer.cs
- WebPartMovingEventArgs.cs
- ClientSideQueueItem.cs
- Button.cs
- EncryptedReference.cs
- TdsParserStateObject.cs
- AdornerDecorator.cs
- FunctionUpdateCommand.cs
- Utils.cs
- EditBehavior.cs
- PolyQuadraticBezierSegment.cs
- SafeRightsManagementPubHandle.cs
- CodeDOMProvider.cs
- CellTreeNodeVisitors.cs
- CaretElement.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- ResourcesGenerator.cs
- SystemThemeKey.cs
- RawStylusInputCustomData.cs
- RawMouseInputReport.cs
- HtmlProps.cs
- WinInet.cs
- TabItem.cs