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
- RewritingSimplifier.cs
- HtmlEmptyTagControlBuilder.cs
- Int16Animation.cs
- XPathCompileException.cs
- Point4D.cs
- ModelItemCollection.cs
- StatusBarPanel.cs
- IsolatedStorageFileStream.cs
- Metadata.cs
- ListSourceHelper.cs
- DnsEndpointIdentity.cs
- WebControlToolBoxItem.cs
- LayoutExceptionEventArgs.cs
- ProfilePropertyMetadata.cs
- MailAddress.cs
- EmptyEnumerable.cs
- ImmutableObjectAttribute.cs
- ThrowOnMultipleAssignment.cs
- LoaderAllocator.cs
- DesignSurface.cs
- TextFormatterHost.cs
- EntryPointNotFoundException.cs
- ControlParameter.cs
- MasterPageCodeDomTreeGenerator.cs
- HttpCachePolicy.cs
- Vector3DCollection.cs
- TimelineGroup.cs
- PointLight.cs
- Single.cs
- ThicknessAnimationBase.cs
- BrushValueSerializer.cs
- QuadraticBezierSegment.cs
- SvcFileManager.cs
- ServiceModelSecurityTokenTypes.cs
- Parameter.cs
- DispatchChannelSink.cs
- EntityDataSourceStatementEditor.cs
- Psha1DerivedKeyGenerator.cs
- XamlTreeBuilder.cs
- ListenerPerfCounters.cs
- Link.cs
- Decoder.cs
- BamlTreeNode.cs
- ChtmlTextWriter.cs
- MobileUserControl.cs
- WrappedIUnknown.cs
- DetailsViewUpdateEventArgs.cs
- SchemaNamespaceManager.cs
- DetailsViewUpdatedEventArgs.cs
- RectangleGeometry.cs
- Inline.cs
- HandleValueEditor.cs
- SystemIPAddressInformation.cs
- RadioButtonFlatAdapter.cs
- HttpListener.cs
- SchemaObjectWriter.cs
- PropertyCollection.cs
- TrustSection.cs
- OutputCacheSettings.cs
- PageStatePersister.cs
- PersianCalendar.cs
- UIPermission.cs
- MediaTimeline.cs
- NativeMethods.cs
- TreeBuilderBamlTranslator.cs
- ObjectIDGenerator.cs
- ControlTemplate.cs
- PointAnimationBase.cs
- XPathMessageFilterElementComparer.cs
- CompModHelpers.cs
- TableCell.cs
- CLRBindingWorker.cs
- ListParagraph.cs
- Catch.cs
- RadioButtonBaseAdapter.cs
- SQLGuid.cs
- RuleRef.cs
- EntityDataSourceContainerNameItem.cs
- _TLSstream.cs
- FileNotFoundException.cs
- EntityParameterCollection.cs
- WebResourceAttribute.cs
- AutomationPattern.cs
- InputScopeManager.cs
- StructuredProperty.cs
- ObjectDataSource.cs
- StrongName.cs
- Update.cs
- ItemAutomationPeer.cs
- HostExecutionContextManager.cs
- ControlPropertyNameConverter.cs
- Assembly.cs
- DataQuery.cs
- Resources.Designer.cs
- Cursor.cs
- CompensatableSequenceActivity.cs
- TextAction.cs
- MulticastNotSupportedException.cs
- DbConnectionStringBuilder.cs
- safePerfProviderHandle.cs