Mega Code Archive

 
Categories / C# / Development Class
 

Implements a TextWriter for writing information to the debugger log

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Globalization; using System.Diagnostics; namespace LinqToTwitterTests.Common {     /// <summary>     /// Implements a <see cref="TextWriter"/> for writing information to the debugger log.     /// </summary>     /// <seealso cref="Debugger.Log"/>     /// <remarks>This code is created by Kris Vandermotten</remarks>     /// /// <remarks>For more information check this link: http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11 </remarks>     public class DebuggerWriter : TextWriter     {         private bool isOpen;         private static UnicodeEncoding encoding;         private readonly int level;         private readonly string category;         /// <summary>         /// Initializes a new instance of the <see cref="DebuggerWriter"/> class.         /// </summary>         public DebuggerWriter()             : this(0, Debugger.DefaultCategory)         {         }         /// <summary>         /// Initializes a new instance of the <see cref="DebuggerWriter"/> class with the specified level and category.         /// </summary>         /// <param name="level">A description of the importance of the messages.</param>         /// <param name="category">The category of the messages.</param>         public DebuggerWriter(int level, string category)             : this(level, category, CultureInfo.CurrentCulture)         {         }         /// <summary>         /// Initializes a new instance of the <see cref="DebuggerWriter"/> class with the specified level, category and format provider.         /// </summary>         /// <param name="level">A description of the importance of the messages.</param>         /// <param name="category">The category of the messages.</param>         /// <param name="formatProvider">An <see cref="IFormatProvider"/> object that controls formatting.</param>         public DebuggerWriter(int level, string category, IFormatProvider formatProvider)             : base(formatProvider)         {             this.level = level;             this.category = category;             this.isOpen = true;         }         protected override void Dispose(bool disposing)         {             isOpen = false;             base.Dispose(disposing);         }         public override void Write(char value)         {             if (!isOpen)             {                 throw new ObjectDisposedException(null);             }             Debugger.Log(level, category, value.ToString());         }         public override void Write(string value)         {             if (!isOpen)             {                 throw new ObjectDisposedException(null);             }             if (value != null)             {                 Debugger.Log(level, category, value);             }         }         public override void Write(char[] buffer, int index, int count)         {             if (!isOpen)             {                 throw new ObjectDisposedException(null);             }             if (buffer == null || index < 0 || count < 0 || buffer.Length - index < count)             {                 base.Write(buffer, index, count); // delegate throw exception to base class             }             Debugger.Log(level, category, new string(buffer, index, count));         }         public override Encoding Encoding         {             get             {                 if (encoding == null)                 {                     encoding = new UnicodeEncoding(false, false);                 }                 return encoding;             }         }         public int Level         {             get { return level; }         }         public string Category         {             get { return category; }         }     } }