如何将DLL中的文本返回到EXE中

时间:2013-11-13 20:10:14

标签: c# windows dll exe

我感谢有人建议的任何帮助,并希望提前感谢你。

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

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

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

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

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

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

您应该考虑observer design pattern。您可以创建事件处理程序,以通知UI项目发生了事件。然后,您可以从UI项目为事件处理程序分配函数,并将日志记录直接输出到RichTextBox。

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