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
- LocalServiceSecuritySettingsElement.cs
- SettingsPropertyValueCollection.cs
- CustomErrorCollection.cs
- RemoteWebConfigurationHostServer.cs
- TextTabProperties.cs
- X509CertificateRecipientClientCredential.cs
- Opcode.cs
- XmlChoiceIdentifierAttribute.cs
- PackUriHelper.cs
- WebRequestModulesSection.cs
- NotFiniteNumberException.cs
- BooleanKeyFrameCollection.cs
- UnionCqlBlock.cs
- XmlIgnoreAttribute.cs
- DateTimeStorage.cs
- _FtpDataStream.cs
- ProjectionQueryOptionExpression.cs
- NetCodeGroup.cs
- ThreadPool.cs
- CompiledXpathExpr.cs
- XPathNodePointer.cs
- TreeNodeEventArgs.cs
- DrawItemEvent.cs
- HybridWebProxyFinder.cs
- ParamArrayAttribute.cs
- StrokeNodeOperations2.cs
- ReflectionPermission.cs
- SqlTypesSchemaImporter.cs
- HtmlElementEventArgs.cs
- SmtpClient.cs
- RegularExpressionValidator.cs
- GlyphElement.cs
- Completion.cs
- QueryableDataSourceHelper.cs
- HttpValueCollection.cs
- StringFormat.cs
- GenericTextProperties.cs
- ComboBoxItem.cs
- InvokeProviderWrapper.cs
- TypedElement.cs
- RewritingPass.cs
- ApplicationServiceManager.cs
- ProcessModelInfo.cs
- ListBox.cs
- MethodBuilder.cs
- TraceFilter.cs
- WindowsUpDown.cs
- TabItem.cs
- SequentialOutput.cs
- Privilege.cs
- GridLength.cs
- LedgerEntry.cs
- ControlCodeDomSerializer.cs
- XmlDataSourceNodeDescriptor.cs
- SerializationStore.cs
- OperationDescription.cs
- TableStyle.cs
- GrammarBuilder.cs
- PeerPresenceInfo.cs
- ToolBarOverflowPanel.cs
- StructuralType.cs
- DispatcherSynchronizationContext.cs
- AuthorizationRule.cs
- PropertySegmentSerializer.cs
- DataTableNewRowEvent.cs
- FileUtil.cs
- BehaviorEditorPart.cs
- RichTextBox.cs
- PageThemeBuildProvider.cs
- HttpModulesSection.cs
- ISO2022Encoding.cs
- MemberPath.cs
- DesignerActionPanel.cs
- EventProperty.cs
- SafeEventLogWriteHandle.cs
- WinEventHandler.cs
- MarshalDirectiveException.cs
- ProcessThread.cs
- DeviceContext2.cs
- FormatVersion.cs
- ChangeDirector.cs
- PerSessionInstanceContextProvider.cs
- CodeArgumentReferenceExpression.cs
- LocatorManager.cs
- TextDpi.cs
- FormsAuthenticationTicket.cs
- AuthenticationModulesSection.cs
- EntityUtil.cs
- EventWaitHandleSecurity.cs
- ScrollBarRenderer.cs
- AsyncCompletedEventArgs.cs
- ThousandthOfEmRealPoints.cs
- PlainXmlDeserializer.cs
- EntityViewGenerationAttribute.cs
- ControlFilterExpression.cs
- ObjectReaderCompiler.cs
- CriticalHandle.cs
- SymbolPair.cs
- GuidelineCollection.cs
- TextProperties.cs