我有这个现有的功能,我想转换,所以它会将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);
}
答案 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);
我没有测试它但它应该可以工作!