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
- PreloadedPackages.cs
- MemberMaps.cs
- ChainedAsyncResult.cs
- UiaCoreTypesApi.cs
- OleDbRowUpdatingEvent.cs
- DockingAttribute.cs
- ToggleProviderWrapper.cs
- httpserverutility.cs
- UInt32Storage.cs
- ScriptReferenceEventArgs.cs
- CodeArgumentReferenceExpression.cs
- EventLogPermissionHolder.cs
- XpsDocument.cs
- VerificationException.cs
- ListViewCommandEventArgs.cs
- FrameworkElement.cs
- ExtensionSimplifierMarkupObject.cs
- PathSegment.cs
- SoapEnumAttribute.cs
- Tablet.cs
- SqlDataSourceCache.cs
- SafeFileMappingHandle.cs
- DispatcherSynchronizationContext.cs
- CompatibleComparer.cs
- ClientBuildManagerCallback.cs
- Number.cs
- SqlCrossApplyToCrossJoin.cs
- IndentedWriter.cs
- IList.cs
- PageAsyncTaskManager.cs
- RoutedEventArgs.cs
- AttributeCollection.cs
- FindCriteria11.cs
- RadioButton.cs
- JapaneseLunisolarCalendar.cs
- XPathArrayIterator.cs
- Vector3DKeyFrameCollection.cs
- ClientData.cs
- MatrixAnimationUsingKeyFrames.cs
- UnderstoodHeaders.cs
- EventLogSession.cs
- sqlcontext.cs
- ExecutionContext.cs
- EventHandlersStore.cs
- BaseResourcesBuildProvider.cs
- ISAPIApplicationHost.cs
- MulticastNotSupportedException.cs
- HuffmanTree.cs
- ResourceSet.cs
- ProxySimple.cs
- HtmlTableRow.cs
- ExpressionEditorSheet.cs
- Range.cs
- LicenseProviderAttribute.cs
- DesignTimeVisibleAttribute.cs
- WindowsStartMenu.cs
- XmlQueryOutput.cs
- InputReport.cs
- PasswordTextContainer.cs
- WhitespaceReader.cs
- Atom10FormatterFactory.cs
- EditBehavior.cs
- OleDbPropertySetGuid.cs
- CompiledXpathExpr.cs
- StylusButton.cs
- PolygonHotSpot.cs
- CorrelationService.cs
- TreeNode.cs
- UnknownWrapper.cs
- XmlFormatMapping.cs
- CachingParameterInspector.cs
- ContainerUIElement3D.cs
- EncryptedKey.cs
- PingReply.cs
- XXXOnTypeBuilderInstantiation.cs
- ApplyImportsAction.cs
- NotifyInputEventArgs.cs
- RepeatInfo.cs
- WindowsStreamSecurityBindingElement.cs
- PromptBuilder.cs
- RequestCachePolicyConverter.cs
- ConnectionStringsExpressionBuilder.cs
- ObjectQueryState.cs
- Viewport3DAutomationPeer.cs
- PropertyChangeTracker.cs
- TextInfo.cs
- ScrollBarAutomationPeer.cs
- XsltContext.cs
- DrawListViewColumnHeaderEventArgs.cs
- WebPartVerb.cs
- TogglePatternIdentifiers.cs
- SamlEvidence.cs
- CodeDOMProvider.cs
- DataGridDesigner.cs
- PackageDocument.cs
- ObjectSelectorEditor.cs
- HScrollProperties.cs
- PersonalizationEntry.cs
- PriorityBindingExpression.cs
- ServiceContractListItemList.cs