0

logMessageをコンソールに出力するように変換したいこの既存の関数があります。もともとこれは、C#でWindowsフォームアプリケーションに変換したコマンドラインアプリとして使用されていました。ファイルまたはコンソールに書き込むように出力ストリームを変更するにはどうすればよいですか?

   /// <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

コンソールの意味が理解できたと思います...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のようなものが提案されますが、1つのスレッドだけでアクセスすることが確実でない限り、その部分を同期することを忘れないでください。

于 2013-03-13T16:08:37.913 に答える
0

Console.Errorファイルに書き込むには、StreamWriterオブジェクトに置き換えることができます。ただし、このメソッドの周りにロックを追加する必要があるかもしれませんが、ファイルに書き込む複数のスレッドからの同時メッセージをこれがどのように処理するかはわかりません。

于 2013-03-13T15:52:31.693 に答える
-1

この行を置き換えます

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

この行で

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

私はそれをテストしませんでしたが、うまくいくはずです!

于 2013-03-13T15:49:12.400 に答える