0

我感谢有人提出的任何帮助,并希望提前感谢您。

所以我的问题是我有一个用 C# 创建的 DLL。DLL 在用户机器上执行一系列操作。我想在执行每个步骤后在 DLL 中添加一个日志记录类型功能,然后在 C# EXE 的输出窗口中显示该步骤(编译代码时 Visual Studio 的样子)

在我的 UI EXE 应用程序中引用了 DLL。

所以有些事情:-我的 C# EXE 是用户界面(现在有一个富文本框窗口,我希望 DLL 的输出可以转到)-我的 DLL 是使用系统反射从 EXE 调用的,它被指出到我要运行的 DLL 中的精确方法,因为执行该方法中的每个步骤,我想知道如何发送字符串或让 EXE 输出窗口知道有一些新数据并显示它。

这样做的最佳方法是什么?我想到了一些,但似乎它们不会很好。如果我将输出放入随机文本文件并让 EXE 查看同一个文件,则可能存在锁定问题。这是我的想法的一个例子,但我知道有更好的方法来做到这一点。

我不知道一切,我希望从这个问题中学到一些东西。我自己做了一些研究,答案还不清楚。我不是 C# 专家,但我希望有一天能成为:)

4

2 回答 2

1

这是我用来做你正在寻找的东西的东西。 http://wintrace.codeplex.com/releases/view/57038

引用“GridViewTraceListner”dll 创建一个Window窗体,添加datagrid“dgvTraceView”,添加标签“lblCounter”,添加按钮“button1”。

接下来在表单加载中添加以下内容。

TraceListener trlistener = new GridViewTraceListener.GridViewTraceListener
                                 (dgvTraceView, lblCounter);
Trace.Listeners.Add(trlistener);

在按钮单击事件上添加类似这样的内容。

Logger.Log("MyTest"); // this is a method in the external dll.

现在在您的“外部” dll 和类似的东西中。

public static void Log(string text)
{
    ConsoleTraceListener listener = new ConsoleTraceListener();
    Trace.Listeners.Add(listener);
    Trace.WriteLine(text);
    Trace.Listeners.Remove(listener);
    Trace.Close();
}
于 2013-11-13T21:03:32.787 回答
0

您应该考虑观察者设计模式。您可以创建事件处理程序以通知您的 UI 项目发生了事件。然后,您可以将功能分配给您的 UI 项目中的事件处理程序,并将日志记录直接输出到您的 RichTextBox。

如果要将参数添加到默认 EventArgs,则需要创建自定义 EventArgs 类。然后你可以设置一个委托来处理你的事件。 http://www.codeproject.com/Articles/1474/Events-and-event-handling-in-C

于 2013-11-13T20:14:45.537 回答