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
- Missing.cs
- TypeSystem.cs
- LicenseManager.cs
- RepeatBehaviorConverter.cs
- TaskHelper.cs
- UnsettableComboBox.cs
- CellParagraph.cs
- IResourceProvider.cs
- WebBrowsableAttribute.cs
- FamilyTypefaceCollection.cs
- __Error.cs
- CloudCollection.cs
- AttributeUsageAttribute.cs
- SystemColors.cs
- CommandManager.cs
- TextComposition.cs
- EditorPartChrome.cs
- FontFamilyValueSerializer.cs
- IncrementalReadDecoders.cs
- Light.cs
- HttpHeaderCollection.cs
- TypedDatasetGenerator.cs
- PolygonHotSpot.cs
- RectangleGeometry.cs
- XsltOutput.cs
- PeerTransportCredentialType.cs
- XmlSchemaAttributeGroupRef.cs
- EnumMember.cs
- AncillaryOps.cs
- SafeReversePInvokeHandle.cs
- CngAlgorithmGroup.cs
- UnsafeNativeMethods.cs
- DescendantQuery.cs
- ToolStripDropDown.cs
- TextServicesCompartmentEventSink.cs
- CheckBoxList.cs
- AuthenticateEventArgs.cs
- DependencyPropertyKey.cs
- XhtmlBasicValidatorAdapter.cs
- ScrollEvent.cs
- Line.cs
- AnnotationDocumentPaginator.cs
- GPPOINTF.cs
- UnhandledExceptionEventArgs.cs
- ScheduleChanges.cs
- XPathLexer.cs
- BitStack.cs
- StrokeNodeOperations.cs
- ExceptionHandlersDesigner.cs
- XmlSchemaDocumentation.cs
- RequestCacheEntry.cs
- XmlSchemaObjectCollection.cs
- BinHexEncoding.cs
- AddingNewEventArgs.cs
- ProfileProvider.cs
- DtdParser.cs
- MD5CryptoServiceProvider.cs
- BaseCollection.cs
- ValueType.cs
- RadioButton.cs
- BufferBuilder.cs
- RetriableClipboard.cs
- XmlNamedNodeMap.cs
- EventMap.cs
- BaseTreeIterator.cs
- SchemaImporterExtensionElement.cs
- PolicyException.cs
- UrlPath.cs
- PhoneCall.cs
- QilGeneratorEnv.cs
- GenericPrincipal.cs
- PolyBezierSegment.cs
- FilteredXmlReader.cs
- TdsParser.cs
- XhtmlTextWriter.cs
- TreeViewBindingsEditorForm.cs
- WorkflowApplicationException.cs
- InputLanguageCollection.cs
- AmbientProperties.cs
- RegexCompilationInfo.cs
- iisPickupDirectory.cs
- TextAnchor.cs
- GridProviderWrapper.cs
- ConfigXmlCDataSection.cs
- __FastResourceComparer.cs
- RefreshPropertiesAttribute.cs
- ControlBindingsCollection.cs
- GlyphRunDrawing.cs
- SHA256.cs
- CommandValueSerializer.cs
- SqlProvider.cs
- RegexCharClass.cs
- CounterSample.cs
- Exception.cs
- PersonalizationEntry.cs
- ProfileServiceManager.cs
- HttpModuleCollection.cs
- XhtmlBasicObjectListAdapter.cs
- WaitForChangedResult.cs
- LocatorGroup.cs