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
- SerializationUtilities.cs
- _TransmitFileOverlappedAsyncResult.cs
- CroppedBitmap.cs
- HitTestWithPointDrawingContextWalker.cs
- AVElementHelper.cs
- TextBlock.cs
- DSASignatureFormatter.cs
- CollectionEditVerbManager.cs
- ADMembershipUser.cs
- TextEditorSpelling.cs
- XmlQuerySequence.cs
- CultureInfoConverter.cs
- DataGrid.cs
- JsonFaultDetail.cs
- LinkGrep.cs
- ChildrenQuery.cs
- ToolboxDataAttribute.cs
- LongAverageAggregationOperator.cs
- DataGridViewAdvancedBorderStyle.cs
- TextTreeRootTextBlock.cs
- TriggerActionCollection.cs
- DiscardableAttribute.cs
- Identifier.cs
- ThreadInterruptedException.cs
- DataGrid.cs
- panel.cs
- SafeRightsManagementSessionHandle.cs
- SkewTransform.cs
- CookieProtection.cs
- CompareInfo.cs
- SqlBuilder.cs
- MetafileHeader.cs
- XmlNotation.cs
- DomainUpDown.cs
- XmlIncludeAttribute.cs
- PrivilegedConfigurationManager.cs
- FullTrustAssembliesSection.cs
- XmlEventCache.cs
- ConstructorNeedsTagAttribute.cs
- DataGridViewColumnHeaderCell.cs
- XmlSchemaGroupRef.cs
- PropertyEmitterBase.cs
- ToolStripDropDownButton.cs
- UriGenerator.cs
- LinqTreeNodeEvaluator.cs
- TextFindEngine.cs
- JoinSymbol.cs
- SqlMethodTransformer.cs
- QueryCacheManager.cs
- CrossSiteScriptingValidation.cs
- DataColumnMapping.cs
- DataRowView.cs
- DefaultHttpHandler.cs
- _HeaderInfo.cs
- PeerCollaborationPermission.cs
- HtmlInputSubmit.cs
- ApplicationId.cs
- CurrentTimeZone.cs
- ConfigErrorGlyph.cs
- LinearGradientBrush.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- WebFormsRootDesigner.cs
- UniqueIdentifierService.cs
- AppSettingsExpressionBuilder.cs
- XMLSchema.cs
- RegistryKey.cs
- ExtensionWindow.cs
- EventToken.cs
- METAHEADER.cs
- TextEditorLists.cs
- WindowsTab.cs
- ScriptResourceHandler.cs
- SendMailErrorEventArgs.cs
- GridViewItemAutomationPeer.cs
- AsymmetricKeyExchangeFormatter.cs
- KeyValuePairs.cs
- ScrollItemPattern.cs
- ExtenderProvidedPropertyAttribute.cs
- ISFClipboardData.cs
- AssertFilter.cs
- ParserHooks.cs
- diagnosticsswitches.cs
- ExpressionVisitorHelpers.cs
- ClientSession.cs
- ProgressBar.cs
- WindowsGrip.cs
- TraceContextEventArgs.cs
- XPathConvert.cs
- IntersectQueryOperator.cs
- EarlyBoundInfo.cs
- SequenceQuery.cs
- ButtonBaseAdapter.cs
- ReachPageContentCollectionSerializerAsync.cs
- UserControl.cs
- TableRow.cs
- Codec.cs
- ViewSimplifier.cs
- SqlCharStream.cs
- TemplateBindingExpressionConverter.cs
- KerberosSecurityTokenProvider.cs