Почти дублирую сообщение
<b>krasin</b>.
Вот так может выглядеть простейший TraceListener, для вывода сообщений в TextBox.
Оригинальная версия не позволяла писать в лог из потока, отличного от потока формы.
Класс листенера:
public class TextBoxTraceListener : TraceListener
{
private TextBox textBox;
public TextBoxTraceListener(TextBox textBox)
{
this.textBox = textBox;
}
public override void WriteLine(string message)
{
string text = string.Format("{0}\r\n", message);
Write(text);
}
private delegate void WriteCallback(string message);
public override void Write(string message)
{
if (textBox.InvokeRequired)
{
WriteCallback d = new WriteCallback(Write);
textBox.Invoke(d, new object[] { message });
}
else
{
textBox.AppendText(message);
}
}
}
В коде формы:
private void Form1_Load(object sender, EventArgs e)
{
Trace.Listeners.Add(new TextBoxTraceListener(textBox1));
}
Везде, где надо писать логи:
Trace.WriteLine("lala");
Здравствуйте, Хитрик Денис, Вы писали:
Сам себя поправляю. Если не хочется чтобы нить задания и нить пользовательского интерфейса друг друга ждали во время операции Trace, можно воспользоваться асинхронным вызовом:
public override void Write(string message)
{
if (textBox.InvokeRequired)
{
WriteCallback d = new WriteCallback(Write);
textBox.BeginInvoke(d, new object[] { message });
}
else
{
textBox.AppendText(message);
}
}