Code:
/ DotNET / DotNET / 8.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
- ViewCellSlot.cs
- HtmlInputRadioButton.cs
- ServiceBehaviorElementCollection.cs
- MetadataCache.cs
- ListControl.cs
- NodeLabelEditEvent.cs
- XmlAttribute.cs
- NameValueConfigurationCollection.cs
- ZeroOpNode.cs
- LinkLabelLinkClickedEvent.cs
- base64Transforms.cs
- ImageListImage.cs
- DiscoveryMessageSequence.cs
- PeerContact.cs
- CodeIterationStatement.cs
- XmlSignificantWhitespace.cs
- TextProviderWrapper.cs
- odbcmetadatacolumnnames.cs
- MessageQueueInstaller.cs
- XmlAnyElementAttribute.cs
- FrameworkContextData.cs
- Math.cs
- WindowInteractionStateTracker.cs
- ObjectKeyFrameCollection.cs
- WebConfigurationFileMap.cs
- HtmlCommandAdapter.cs
- TypedDataSourceCodeGenerator.cs
- PrintControllerWithStatusDialog.cs
- securitycriticaldata.cs
- DeviceFiltersSection.cs
- NullableIntSumAggregationOperator.cs
- UIElementCollection.cs
- SystemTcpConnection.cs
- ReadOnlyHierarchicalDataSource.cs
- SessionEndingCancelEventArgs.cs
- StateInitializationDesigner.cs
- UpdateRecord.cs
- LayoutEditorPart.cs
- AstNode.cs
- ActivityWithResultValueSerializer.cs
- KeySplineConverter.cs
- EntityObject.cs
- WCFModelStrings.Designer.cs
- TabControlEvent.cs
- AutomationElementIdentifiers.cs
- DocumentViewerBase.cs
- TypeInitializationException.cs
- DirectoryRedirect.cs
- Block.cs
- OrderToken.cs
- ImageClickEventArgs.cs
- CommentEmitter.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- SudsCommon.cs
- PrimaryKeyTypeConverter.cs
- followingquery.cs
- OdbcParameterCollection.cs
- LocatorManager.cs
- ToolStripTextBox.cs
- LinearGradientBrush.cs
- SizeConverter.cs
- ProxyWebPartManager.cs
- TypeDescriptor.cs
- CompoundFileReference.cs
- DBBindings.cs
- InvocationExpression.cs
- XmlnsCache.cs
- streamingZipPartStream.cs
- XPathNodeList.cs
- StringAnimationUsingKeyFrames.cs
- DependencyPropertyDescriptor.cs
- AccessDataSourceDesigner.cs
- KeySpline.cs
- BitmapEffectrendercontext.cs
- EdmItemError.cs
- Group.cs
- ServiceHttpModule.cs
- AggregateNode.cs
- EntityContainerEmitter.cs
- StateDesigner.TransitionInfo.cs
- ScriptingProfileServiceSection.cs
- WhitespaceRule.cs
- SystemGatewayIPAddressInformation.cs
- DispatcherHookEventArgs.cs
- PasswordTextContainer.cs
- StartUpEventArgs.cs
- ListMarkerSourceInfo.cs
- TcpProcessProtocolHandler.cs
- AttachedAnnotationChangedEventArgs.cs
- Matrix3DValueSerializer.cs
- DataGridItemEventArgs.cs
- AttachedAnnotationChangedEventArgs.cs
- HierarchicalDataBoundControl.cs
- DataGridTable.cs
- controlskin.cs
- FixedSOMLineCollection.cs
- OperatingSystem.cs
- PathFigureCollectionConverter.cs
- SqlRecordBuffer.cs
- TranslateTransform3D.cs