0

我有这个想要转换的现有函数,因此它将 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);
    }
4

3 回答 3

0

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

于 2013-03-13T15:52:31.693 回答
0

我想我现在明白你所说的控制台是什么意思......你的意思是一些文本框?如果是,那么您可以执行以下操作:

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 建议的那样,但请记住同步该部分,除非您确定您将仅通过一个线程访问它。

于 2013-03-13T16:08:37.913 回答
-1

替换此行

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

有了这条线

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

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

于 2013-03-13T15:49:12.400 回答