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
- PropertyRef.cs
- ObjectStateEntryDbDataRecord.cs
- String.cs
- CqlGenerator.cs
- DrawingAttributes.cs
- NavigationFailedEventArgs.cs
- _NegotiateClient.cs
- RunClient.cs
- transactioncontext.cs
- ListParagraph.cs
- ManagedWndProcTracker.cs
- BasicBrowserDialog.designer.cs
- FileResponseElement.cs
- CompiledXpathExpr.cs
- TreeChangeInfo.cs
- ConfigXmlAttribute.cs
- ClientSettingsProvider.cs
- SplineKeyFrames.cs
- GPRECT.cs
- XmlNodeReader.cs
- ImageCodecInfo.cs
- SchemaElementLookUpTable.cs
- DataGridViewCheckBoxCell.cs
- Table.cs
- TreeNodeMouseHoverEvent.cs
- ProfilePropertyMetadata.cs
- ExtensionQuery.cs
- XPathParser.cs
- XPathArrayIterator.cs
- NavigationHelper.cs
- LineServices.cs
- PathFigureCollectionConverter.cs
- WebPartUserCapability.cs
- OptimizedTemplateContent.cs
- Fonts.cs
- Oid.cs
- ErrorProvider.cs
- ThreadSafeList.cs
- RoleManagerEventArgs.cs
- BinHexEncoder.cs
- NameTable.cs
- Axis.cs
- SystemIcmpV6Statistics.cs
- XmlDataLoader.cs
- NativeMethods.cs
- RectAnimation.cs
- Wildcard.cs
- DataService.cs
- TraceListeners.cs
- SByte.cs
- WorkflowExecutor.cs
- PriorityRange.cs
- CodeAttributeArgument.cs
- BindableAttribute.cs
- ObjectRef.cs
- DbException.cs
- FindSimilarActivitiesVerb.cs
- PlatformNotSupportedException.cs
- CompareValidator.cs
- ControlPropertyNameConverter.cs
- CodeSnippetTypeMember.cs
- SessionEndingCancelEventArgs.cs
- MarshalByRefObject.cs
- X509ClientCertificateAuthentication.cs
- CustomBindingElementCollection.cs
- HttpRequestTraceRecord.cs
- CompensatableTransactionScopeActivityDesigner.cs
- UInt16Converter.cs
- DockingAttribute.cs
- SortedDictionary.cs
- SqlMultiplexer.cs
- BinaryExpression.cs
- DataBindEngine.cs
- LambdaCompiler.Logical.cs
- compensatingcollection.cs
- AxDesigner.cs
- PartitionerQueryOperator.cs
- PackageRelationshipCollection.cs
- DataGridViewCellPaintingEventArgs.cs
- CellConstantDomain.cs
- ProxyHelper.cs
- ColumnHeaderConverter.cs
- WebEvents.cs
- HandlerFactoryCache.cs
- ToolStripStatusLabel.cs
- EntityClassGenerator.cs
- GridViewCommandEventArgs.cs
- BasicBrowserDialog.cs
- FlowDocumentReader.cs
- CodeNamespace.cs
- SmtpCommands.cs
- SmiMetaDataProperty.cs
- AvTrace.cs
- RepeatBehaviorConverter.cs
- XmlBindingWorker.cs
- ToolStrip.cs
- SchemeSettingElement.cs
- SHA1.cs
- Identity.cs
- Rule.cs