Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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 // 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 List tracesources = 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
- CustomAttribute.cs
- UIElementCollection.cs
- __ComObject.cs
- Attributes.cs
- ExecutionContext.cs
- PackWebRequest.cs
- PolygonHotSpot.cs
- AgileSafeNativeMemoryHandle.cs
- CapabilitiesPattern.cs
- AssociationTypeEmitter.cs
- TypeSystemProvider.cs
- ContainerFilterService.cs
- XmlAtomErrorReader.cs
- _AutoWebProxyScriptHelper.cs
- CSharpCodeProvider.cs
- MyContact.cs
- OutputCacheSettingsSection.cs
- RelationshipWrapper.cs
- SimpleWorkerRequest.cs
- TemplatedAdorner.cs
- RolePrincipal.cs
- XmlSchemaComplexContentRestriction.cs
- DPAPIProtectedConfigurationProvider.cs
- ZipIOExtraFieldZip64Element.cs
- ControlEvent.cs
- SqlProcedureAttribute.cs
- OpenTypeLayout.cs
- TextMessageEncodingElement.cs
- PtsHost.cs
- TcpDuplicateContext.cs
- RowUpdatingEventArgs.cs
- Hash.cs
- ExpressionCopier.cs
- ConfigurationLockCollection.cs
- PtsContext.cs
- WriteableBitmap.cs
- CodeTypeReferenceExpression.cs
- DataGridPageChangedEventArgs.cs
- ComboBox.cs
- DataMemberAttribute.cs
- BoundPropertyEntry.cs
- CLSCompliantAttribute.cs
- VBCodeProvider.cs
- SpotLight.cs
- SmiEventSink.cs
- NetStream.cs
- SslStream.cs
- ToolBarPanel.cs
- SmtpReplyReader.cs
- SocketInformation.cs
- MulticastIPAddressInformationCollection.cs
- DataBindingExpressionBuilder.cs
- Vector3DCollection.cs
- FileChangesMonitor.cs
- LinqDataSourceView.cs
- SqlBulkCopyColumnMapping.cs
- ResizeGrip.cs
- GridViewColumnHeaderAutomationPeer.cs
- FieldToken.cs
- ComponentResourceKey.cs
- ReadOnlyHierarchicalDataSourceView.cs
- ByteStack.cs
- AssemblyBuilder.cs
- BatchParser.cs
- ProgressBarHighlightConverter.cs
- DataGridViewDataErrorEventArgs.cs
- DataGridViewRowPostPaintEventArgs.cs
- PropertyDescriptorCollection.cs
- PointAnimationUsingPath.cs
- CompressEmulationStream.cs
- Mouse.cs
- ExceptionRoutedEventArgs.cs
- RoleGroupCollection.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- SpellerHighlightLayer.cs
- AuthenticatedStream.cs
- AppSettingsSection.cs
- MultiByteCodec.cs
- XmlText.cs
- OdbcCommand.cs
- Int32Animation.cs
- UInt64.cs
- BitmapDecoder.cs
- AsyncOperation.cs
- OracleDateTime.cs
- TakeQueryOptionExpression.cs
- DesignerTransactionCloseEvent.cs
- WebPartCloseVerb.cs
- ToolTip.cs
- SplitContainer.cs
- ListViewInsertEventArgs.cs
- JsonGlobals.cs
- StructuredTypeEmitter.cs
- ViewCellRelation.cs
- ArrayConverter.cs
- PrivacyNoticeBindingElementImporter.cs
- PenContext.cs
- ConstNode.cs
- EditorPartCollection.cs
- SQLBoolean.cs