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
- RoutedEventValueSerializer.cs
- HtmlTableCellCollection.cs
- GetWorkflowTree.cs
- BamlTreeUpdater.cs
- DataControlImageButton.cs
- RuntimeEnvironment.cs
- InstanceCollisionException.cs
- JavaScriptObjectDeserializer.cs
- ProgressBar.cs
- XamlTypeMapper.cs
- ButtonAutomationPeer.cs
- TypefaceMap.cs
- FormView.cs
- DesignTimeTemplateParser.cs
- ParameterToken.cs
- ScrollableControl.cs
- Utils.cs
- Exceptions.cs
- Image.cs
- SimpleBitVector32.cs
- DesignerWidgets.cs
- TableLayoutRowStyleCollection.cs
- ConstructorArgumentAttribute.cs
- PropertyValueChangedEvent.cs
- Tablet.cs
- DataAdapter.cs
- InkCanvasFeedbackAdorner.cs
- ProjectionPlan.cs
- OleDbFactory.cs
- DataGridColumnHeadersPresenter.cs
- RtfToXamlReader.cs
- GridErrorDlg.cs
- PointAnimation.cs
- PathNode.cs
- Enum.cs
- ContractCodeDomInfo.cs
- AppSettingsSection.cs
- CodeActivityMetadata.cs
- ReliableChannelListener.cs
- BaseTemplatedMobileComponentEditor.cs
- XmlSchemaImporter.cs
- DataGridColumnHeadersPresenter.cs
- PackageDigitalSignature.cs
- SplashScreenNativeMethods.cs
- DependencyObjectType.cs
- AlgoModule.cs
- ScaleTransform3D.cs
- TextTreeUndoUnit.cs
- StyleConverter.cs
- InkPresenterAutomationPeer.cs
- EdgeModeValidation.cs
- SymbolType.cs
- Semaphore.cs
- ReflectionHelper.cs
- EntityDataSourceConfigureObjectContextPanel.cs
- BaseConfigurationRecord.cs
- DataGridColumnCollection.cs
- FrameworkEventSource.cs
- DesignerForm.cs
- localization.cs
- SchemaConstraints.cs
- UrlEncodedParameterWriter.cs
- ErrorProvider.cs
- DiscoveryExceptionDictionary.cs
- DataGridViewControlCollection.cs
- Environment.cs
- CancellableEnumerable.cs
- LessThanOrEqual.cs
- XmlDocument.cs
- ToolBar.cs
- InputScopeConverter.cs
- DeploymentSection.cs
- StreamMarshaler.cs
- SimpleExpression.cs
- RightsManagementPermission.cs
- ServiceNotStartedException.cs
- EntityConnection.cs
- ScrollBarAutomationPeer.cs
- BaseTemplateCodeDomTreeGenerator.cs
- CustomPopupPlacement.cs
- IPPacketInformation.cs
- _RequestCacheProtocol.cs
- BrowserCapabilitiesFactoryBase.cs
- AnnotationResourceCollection.cs
- TransformerConfigurationWizardBase.cs
- BufferAllocator.cs
- XmlSchemaComplexContentRestriction.cs
- serverconfig.cs
- XmlBinaryReader.cs
- ElementNotEnabledException.cs
- ImmutableObjectAttribute.cs
- WSHttpBindingBaseElement.cs
- XslAstAnalyzer.cs
- GridViewRow.cs
- NamedPipeTransportBindingElement.cs
- SessionPageStateSection.cs
- AssociationTypeEmitter.cs
- ServiceBuildProvider.cs
- XmlTypeAttribute.cs
- ExpressionContext.cs