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)
| 归档时间: |
|
| 查看次数: |
14285 次 |
| 最近记录: |