Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InputProcessorProfiles.cs
- DesignTimeTemplateParser.cs
- DefaultSection.cs
- TextBoxAutomationPeer.cs
- TempFiles.cs
- CacheForPrimitiveTypes.cs
- ExpressionEvaluator.cs
- StrokeRenderer.cs
- SelfIssuedAuthRSACryptoProvider.cs
- FacetEnabledSchemaElement.cs
- RuntimeHelpers.cs
- SafeNativeMethods.cs
- Accessible.cs
- DataGridViewTextBoxEditingControl.cs
- EncodingNLS.cs
- Boolean.cs
- SafeEventLogWriteHandle.cs
- TextDecoration.cs
- TypeBuilder.cs
- BezierSegment.cs
- itemelement.cs
- CheckoutException.cs
- NumberEdit.cs
- ToolStripCodeDomSerializer.cs
- RemoveStoryboard.cs
- OutArgumentConverter.cs
- WFItemsToSpacerVisibility.cs
- invalidudtexception.cs
- SortKey.cs
- DbFunctionCommandTree.cs
- TextProperties.cs
- SynchronizedInputAdaptor.cs
- Set.cs
- AdornerLayer.cs
- Parallel.cs
- _ListenerRequestStream.cs
- ObjectItemCachedAssemblyLoader.cs
- MultiByteCodec.cs
- SyndicationLink.cs
- ResXResourceWriter.cs
- MetadataArtifactLoaderCompositeFile.cs
- HeaderUtility.cs
- XpsDigitalSignature.cs
- X509CertificateChain.cs
- ConstructorNeedsTagAttribute.cs
- SiteMembershipCondition.cs
- DataBindingHandlerAttribute.cs
- DataGridItem.cs
- StringSorter.cs
- DrawToolTipEventArgs.cs
- connectionpool.cs
- ExpressionBinding.cs
- SafeNativeMethods.cs
- TextReader.cs
- SqlFileStream.cs
- GreenMethods.cs
- CommonDialog.cs
- Rotation3DKeyFrameCollection.cs
- UnsettableComboBox.cs
- BrowserTree.cs
- GeometryModel3D.cs
- CrossAppDomainChannel.cs
- webproxy.cs
- XmlSchemaGroup.cs
- GreaterThan.cs
- SafeCryptContextHandle.cs
- PathFigureCollectionConverter.cs
- EnumConverter.cs
- GrammarBuilderPhrase.cs
- UnsignedPublishLicense.cs
- AnimationTimeline.cs
- DataGridViewRowCancelEventArgs.cs
- PartialArray.cs
- MemoryMappedFile.cs
- Geometry3D.cs
- WmlControlAdapter.cs
- DocumentCollection.cs
- DataSourceCache.cs
- XmlDataImplementation.cs
- ThousandthOfEmRealDoubles.cs
- SizeConverter.cs
- AsymmetricKeyExchangeDeformatter.cs
- _BaseOverlappedAsyncResult.cs
- BuiltInExpr.cs
- DataTable.cs
- ObjectDataSourceFilteringEventArgs.cs
- XmlSchemaDatatype.cs
- TimeoutException.cs
- SmtpAuthenticationManager.cs
- CachedFontFamily.cs
- ParserOptions.cs
- BaseDataList.cs
- AssemblyName.cs
- CapiHashAlgorithm.cs
- ComplexTypeEmitter.cs
- BinaryParser.cs
- ItemList.cs
- WebBrowserEvent.cs
- HtmlControl.cs
- ConfigXmlReader.cs