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
- FileDialogCustomPlace.cs
- Stack.cs
- IDReferencePropertyAttribute.cs
- SettingsPropertyWrongTypeException.cs
- WebPartConnectionCollection.cs
- HwndTarget.cs
- XmlHierarchyData.cs
- ToolConsole.cs
- UserControl.cs
- SystemIPGlobalStatistics.cs
- RegexCaptureCollection.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- GroupByExpressionRewriter.cs
- XmlDataLoader.cs
- TiffBitmapDecoder.cs
- EdmItemError.cs
- XamlHostingSection.cs
- BulletChrome.cs
- CatalogPartChrome.cs
- SQLBytesStorage.cs
- DeclarativeExpressionConditionDeclaration.cs
- XamlToRtfWriter.cs
- CoreSwitches.cs
- CompModSwitches.cs
- SystemTcpConnection.cs
- TraceHelpers.cs
- HtmlTable.cs
- GridLength.cs
- RectangleConverter.cs
- UriSectionReader.cs
- StructuralObject.cs
- Renderer.cs
- SqlClientPermission.cs
- SqlDataSourceRefreshSchemaForm.cs
- ExceptionTranslationTable.cs
- SolidColorBrush.cs
- XmlDataSource.cs
- NullableIntSumAggregationOperator.cs
- SpecialTypeDataContract.cs
- TagPrefixCollection.cs
- EntityViewGenerationConstants.cs
- InputReport.cs
- WindowsTab.cs
- RepeaterCommandEventArgs.cs
- ConnectionsZone.cs
- PropertyDescriptor.cs
- ParameterToken.cs
- SharedConnectionWorkflowTransactionService.cs
- UriExt.cs
- ItemChangedEventArgs.cs
- DirectoryNotFoundException.cs
- ZoneIdentityPermission.cs
- RotateTransform3D.cs
- RangeValuePattern.cs
- StorageFunctionMapping.cs
- ItemCollection.cs
- EventLog.cs
- MatrixValueSerializer.cs
- PanelStyle.cs
- PropertySourceInfo.cs
- XPathPatternParser.cs
- RuleInfoComparer.cs
- CellIdBoolean.cs
- ResourceKey.cs
- Point3DConverter.cs
- ExpressionVisitor.cs
- SeekStoryboard.cs
- ItemDragEvent.cs
- sqlcontext.cs
- MetadataArtifactLoader.cs
- CollectionDataContract.cs
- SoapIncludeAttribute.cs
- ToolStripOverflowButton.cs
- MouseEvent.cs
- FixedDSBuilder.cs
- remotingproxy.cs
- ComponentCommands.cs
- MessageQuerySet.cs
- CodeGroup.cs
- InputChannelAcceptor.cs
- ChannelServices.cs
- TypeSystem.cs
- XmlElement.cs
- FixedSOMContainer.cs
- COM2EnumConverter.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- FormsAuthenticationUser.cs
- TemplateColumn.cs
- ReflectionUtil.cs
- HtmlElement.cs
- ActivitySurrogate.cs
- OdbcCommand.cs
- HiddenFieldPageStatePersister.cs
- ApplicationManager.cs
- CollectionViewSource.cs
- HideDisabledControlAdapter.cs
- ServicePerformanceCounters.cs
- ConnectionConsumerAttribute.cs
- LoginView.cs
- StylusPlugInCollection.cs