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
- LinkedList.cs
- Message.cs
- AxHost.cs
- BitmapMetadata.cs
- QualifiedId.cs
- FontFamilyValueSerializer.cs
- CodeNamespaceImport.cs
- XmlSchemaSet.cs
- FontUnit.cs
- CatalogPartCollection.cs
- XsltOutput.cs
- Quaternion.cs
- ValidationEventArgs.cs
- ScriptBehaviorDescriptor.cs
- LiteralControl.cs
- KnownTypeAttribute.cs
- DeferredTextReference.cs
- LocatorPart.cs
- GridViewRowPresenterBase.cs
- ConfigXmlSignificantWhitespace.cs
- objectquery_tresulttype.cs
- PointCollection.cs
- DeviceContexts.cs
- ZipIOExtraFieldElement.cs
- DataColumnChangeEvent.cs
- CodeNamespaceImportCollection.cs
- DictionarySurrogate.cs
- TypeUnloadedException.cs
- ScalarType.cs
- SystemKeyConverter.cs
- ContainsRowNumberChecker.cs
- EntityAdapter.cs
- SqlPersonalizationProvider.cs
- Trace.cs
- TimeEnumHelper.cs
- DesignerActionUIStateChangeEventArgs.cs
- NavigationHelper.cs
- TemplateBamlTreeBuilder.cs
- PointAnimationUsingKeyFrames.cs
- AsyncPostBackTrigger.cs
- WindowInteropHelper.cs
- Baml2006Reader.cs
- ASCIIEncoding.cs
- HttpPostedFile.cs
- ConstructorArgumentAttribute.cs
- GridViewAutomationPeer.cs
- OracleTransaction.cs
- CodeDelegateInvokeExpression.cs
- AppliedDeviceFiltersEditor.cs
- XsltFunctions.cs
- SystemEvents.cs
- SupportsEventValidationAttribute.cs
- NameValueConfigurationElement.cs
- ImportContext.cs
- ReflectEventDescriptor.cs
- ErrorCodes.cs
- WebHttpBinding.cs
- CodeTypeOfExpression.cs
- ProfileBuildProvider.cs
- ObjectComplexPropertyMapping.cs
- InstanceData.cs
- FreezableOperations.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- documentsequencetextpointer.cs
- XLinq.cs
- TypeConverterValueSerializer.cs
- SafeSystemMetrics.cs
- FileRegion.cs
- DnsPermission.cs
- _SSPIWrapper.cs
- RMPublishingDialog.cs
- SoapTypeAttribute.cs
- UnmanagedMarshal.cs
- Int32KeyFrameCollection.cs
- NoClickablePointException.cs
- UpdateDelegates.Generated.cs
- AffineTransform3D.cs
- ListViewHitTestInfo.cs
- XmlBindingWorker.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- ProfilePropertySettings.cs
- ComponentDispatcher.cs
- LinkDescriptor.cs
- PathFigureCollection.cs
- ScrollEvent.cs
- AppDomainShutdownMonitor.cs
- HttpServerUtilityWrapper.cs
- StringAnimationUsingKeyFrames.cs
- HScrollProperties.cs
- TabPanel.cs
- SqlClientFactory.cs
- PerformanceCounterCategory.cs
- StackOverflowException.cs
- PropertyToken.cs
- DropAnimation.xaml.cs
- _BasicClient.cs
- Content.cs
- ActivityAction.cs
- RelationshipDetailsCollection.cs
- ThreadAbortException.cs