gpt4 book ai didi

c# - 自定义跟踪输出

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:50 25 4
gpt4 key购买 nike

我在我的两个项目中使用了 Trace,但我在这两个项目中看到了不同的行为:

第一个项目是一个控制台应用程序,我将其转换为服务(此时我将消除控制台跟踪),并且我添加了两个 Trace 监听器:

Trace.Listeners.Add(new TextWriterTraceListener(someFileStream));
Trace.Listeners.Add(new ConsoleTraceListener());

第二个项目是一个 WinForm 应用程序,我有一个显示 Trace 信息的“ConsoleForm”,用户可以随意打开和关闭它。对于该应用程序,我还添加了一个 Trace 监听器:

Trace.Listeners.Add(new TextWriterTraceListener(
new TextBoxStreamWriter(new WriteToTextBox(OnTextBoxWrite))));

TextBoxStreamWriter 是我创建的自定义类,它允许我写入 ConsoleForm 的文本框。无论如何,这是我遇到的问题:控制台应用程序显示任何性能跟踪,而 Windows 应用程序显示,这里是一个性能跟踪示例:

API: Performance::OnCPUThread CPU Usage: [0%], Memory Usage: 59mb

我不关心性能信息,所以我对控制台应用程序处理它的方式非常满意,但我不知道如何为 Windows 应用程序获得相同的行为。有人知道为什么会这样吗?我该如何解决?

更新

我没有做任何疯狂的事情,实际上它甚至很简单......这是我的代码:

public partial class ConsoleForm : Form
{
public delegate void WriteToTextBox(string value);

public ConsoleForm()
{
InitializeComponent();
Trace.AutoFlush = true;
Trace.Listeners.Add(new TextWriterTraceListener(
new TextBoxStreamWriter(new WriteToTextBox(OnTextBoxWrite))));
}

private void ConsoleForm_Load(object sender, EventArgs e)
{
}

private void OnTextBoxWrite(string value)
{
if (!this.IsHandleCreated)
return;

if (this.InvokeRequired)
{
object[] parameters = { value };
BeginInvoke(new WriteToTextBox(OnTextBoxWrite), parameters);
}
else
{
// ConsoleBox is a simple multiline text box
ConsoleBox.AppendText(value);
}
}

private void ConsoleForm_Closing(object sender, FormClosingEventArgs e)
{
Trace.Flush();
if (e.CloseReason != CloseReason.FormOwnerClosing )
{
e.Cancel = true;
this.Hide();
}
}
}

我的 TextBoxStreamWriter实现 TextWriter 接口(interface)...唯一的区别是控制台应用程序是 .Net 4.0,而 GUI 应用程序是 .Net 3.5,但我怀疑这会有所不同。可以找到我的 TextBoxStreamWriter 实现 here (pastie).

最佳答案

仅添加 TraceListener 不会导致记录该消息。

您能否提供有关您的应用正在执行的操作的更多详细信息。

尝试在一个新的简单 WinForm 应用程序中测试您的 TraceListener,我不希望您看到这些消息。如果你这样做,你的监听器实现中有一些东西..

关于c# - 自定义跟踪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3722436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com