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
- NameValueFileSectionHandler.cs
- ContextStack.cs
- Bidi.cs
- SqlVisitor.cs
- CodeTypeConstructor.cs
- HtmlTableCell.cs
- TraceProvider.cs
- Stackframe.cs
- RemoteWebConfigurationHostStream.cs
- ConsumerConnectionPointCollection.cs
- NewItemsContextMenuStrip.cs
- CurrencyManager.cs
- SqlDataSourceConfigureSelectPanel.cs
- MenuItemStyle.cs
- PostBackTrigger.cs
- MarkupCompilePass2.cs
- HtmlTitle.cs
- SecurityState.cs
- OrderByBuilder.cs
- FixedSOMTextRun.cs
- Part.cs
- DataGridRelationshipRow.cs
- DataGridLength.cs
- ReachObjectContext.cs
- SiteMapPath.cs
- Int32CAMarshaler.cs
- X509PeerCertificateAuthenticationElement.cs
- BitmapMetadataBlob.cs
- brushes.cs
- DbConnectionPoolIdentity.cs
- DetailsView.cs
- SqlConnectionFactory.cs
- TcpTransportBindingElement.cs
- BrowserDefinitionCollection.cs
- FileDialog_Vista_Interop.cs
- DataBoundControlHelper.cs
- ScalarType.cs
- QueryHandler.cs
- SimpleType.cs
- ObjectCacheHost.cs
- DynamicValidatorEventArgs.cs
- PathFigure.cs
- ArrangedElementCollection.cs
- SourceFilter.cs
- GACIdentityPermission.cs
- CapabilitiesSection.cs
- ReadOnlyCollectionBuilder.cs
- Semaphore.cs
- SqlMetaData.cs
- Vector3DIndependentAnimationStorage.cs
- RecognizedPhrase.cs
- DelegateCompletionCallbackWrapper.cs
- GlyphsSerializer.cs
- SchemaImporterExtensionElement.cs
- XmlILStorageConverter.cs
- Renderer.cs
- XmlUtil.cs
- CodeVariableReferenceExpression.cs
- Renderer.cs
- AppLevelCompilationSectionCache.cs
- XmlDomTextWriter.cs
- Int32RectConverter.cs
- VectorConverter.cs
- UnmanagedBitmapWrapper.cs
- HtmlElementEventArgs.cs
- BaseDataBoundControl.cs
- RegexStringValidatorAttribute.cs
- CombinedGeometry.cs
- XPathDescendantIterator.cs
- ShapingEngine.cs
- DialogResultConverter.cs
- HttpMethodConstraint.cs
- COM2PropertyPageUITypeConverter.cs
- COAUTHINFO.cs
- TypeSystemHelpers.cs
- XmlSortKey.cs
- DataGridTablesFactory.cs
- PropertyTab.cs
- TextBoxRenderer.cs
- XmlSortKeyAccumulator.cs
- KeyboardEventArgs.cs
- SafeLibraryHandle.cs
- RemotingConfiguration.cs
- IndexedGlyphRun.cs
- EntityDataSourceQueryBuilder.cs
- Rect3D.cs
- SequentialWorkflowHeaderFooter.cs
- ParserContext.cs
- Literal.cs
- CodeTypeMemberCollection.cs
- XmlQueryContext.cs
- ConsumerConnectionPointCollection.cs
- EntityProviderFactory.cs
- ParamArrayAttribute.cs
- DataBoundControlHelper.cs
- StringBuilder.cs
- PageAsyncTask.cs
- Instrumentation.cs
- FormatVersion.cs
- ConstrainedGroup.cs