更改文本编写器以写入控制台

时间:2013-03-13 15:47:27

标签: c# visual-studio-2010

我有这个现有的功能,我想转换,所以它会将logMessage打印到控制台。最初这被用作我在C#中转换为Windows窗体应用程序的cmd行应用程序。如何更改输出流以便将其写入文件或控制台?

   /// <summary>
    /// Prints a log message to stderr.
    /// </summary>

public static void logMessage(String format, params Object[] args)
    { //Change output stream if desired
        TextWriter logStream = Console.Error;
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        logStream.WriteLine(logTime() + " " + format, args);
    }

3 个答案:

答案 0 :(得分:0)

要写入文件,您可以使用Console.Error对象替换StreamWriter。您可能需要在此方法周围添加一些锁定,我不确定这将如何处理来自多个线程写入文件的并发消息。

答案 1 :(得分:0)

我想我现在明白你对控制台的意思了...你的意思是一些TextBox?如果是,那么你可以这样做:

public class TextBoxWriter : TextWriter
{
    TextBox _textBox = null;

    public TextBoxWriter(TextBox textBox)
    {
        _textBox = textBox;
    }

    private void AppendText(string message) 
    {
        _textBox.AppendText(message);
        _textBox.AppendText(Environment.NewLine);
    }

    public override void Write(string message)
    {
        base.Write(message);
        if (_textBox.InvokeRequired) 
            _textBox.Invoke(new Action<string>((msg) => AppendText(msg)), message);
        else 
            AppendText(message);
    }

    public override Encoding Encoding
    {
        get { return System.Text.Encoding.UTF8; }
    }
}

然后

TextWriter logStream = new TextBoxWriter(yourTextBox);

如果您想写入文件,那么可能会像Joe建议的那样,但请记住同步该部分,除非您确定只能通过一个线程访问它。

答案 2 :(得分:-1)

替换此行

logStream.WriteLine(logTime() + " " + format, args);

使用此行

Console.WriteLine(logTime() + " " + format, args);

我没有测试它但它应该可以工作!