跟踪侦听器写入文本框(WPF应用程序)

kjv*_*kjv 14 c# wpf trace textbox listener

对于我的WPF应用程序,我使用TextWriterTraceListener记录到文本文件.如何将跟踪输出显示到文本框?

nos*_*nos 22

我用这个用于C#winforms,应该可以很容易地调整为wpf

public class MyTraceListener : TraceListener
{
    private TextBoxBase output;

    public MyTraceListener(TextBoxBase output) {
        this.Name = "Trace";
        this.output = output;
    }


    public override void Write(string message) {

        Action append = delegate() {
            output.AppendText(string.Format("[{0}] ", DateTime.Now.ToString()));
            output.AppendText(message); 
        };
        if (output.InvokeRequired) {
            output.BeginInvoke(append);
        } else {
            append();
        }

    }

    public override void WriteLine(string message) {
        Write(message + Environment.NewLine);
    }
}
Run Code Online (Sandbox Code Playgroud)

像它一样使用它

TraceListener debugListener = new MyTraceListener (theTextBox);
Debug.Listeners.Add(debugListener);
Trace.Listeners.Add(debugListener);
Run Code Online (Sandbox Code Playgroud)

记得Trace/Debug.Listeners.Remove(debugListener); 当你不再需要它的时候.


Mar*_*ann 12

如何实现一个只是将跟踪消息附加到字符串的自定义TraceListener?然后,您将该字符串作为属性公开,实现INotifyPropertyChanged并将TextBox控件数据绑定到该属性.

像这样的东西:

public class MyTraceListener : TraceListener, INotifyPropertyChanged
{
    private readonly StringBuilder builder;

    public MyTraceListener()
    {
        this.builder = new StringBuilder();
    }

    public string Trace
    {
        get { return this.builder.ToString(); }
    }

    public override void Write(string message)
    {
        this.builder.Append(message);
        this.OnPropertyChanged(new PropertyChangedEventArgs("Trace"));
    }

    public override void WriteLine(string message)
    {
        this.builder.AppendLine(message);
        this.OnPropertyChanged(new PropertyChangedEventArgs("Trace"));
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            handler(this, e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您需要将此TraceListener添加到活动侦听器列表中:

Trace.Listeners.Add(new MyTraceListener());
Run Code Online (Sandbox Code Playgroud)