Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将DLL中的文本恢复到EXE中_C#_Windows_Dll_Exe - Fatal编程技术网

C# 如何将DLL中的文本恢复到EXE中

C# 如何将DLL中的文本恢复到EXE中,c#,windows,dll,exe,C#,Windows,Dll,Exe,我感谢任何人建议的帮助,并想提前感谢你 所以我的问题是我有一个用C#创建的DLL。DLL在用户计算机上执行一系列操作。我希望在执行每个步骤后在DLL中添加一个日志类型功能,然后在C#EXE的输出窗口中显示该步骤(类似于Visual Studio编译代码时的样子) DLL在我的UI EXE应用程序中引用 所以对于一些事情: -我的C#EXE是一个用户界面(目前有一个富文本框窗口,我希望从DLL输出到该窗口) -使用系统反射从EXE调用我的DLL,系统反射指向我要运行的DLL中的精确方法,在执行方法

我感谢任何人建议的帮助,并想提前感谢你

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

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

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

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

我不知道所有的事情,我希望从这个问题中学到一些东西。我自己做了一些研究,但答案并不清楚。我不是一个专家,但我希望有一天:)您可以创建事件处理程序,用于通知UI项目已发生事件。然后,您可以从UI项目向事件处理程序分配函数,并将日志记录直接输出到RichTextBox

如果要向默认EventArgs添加参数,则需要创建自定义EventArgs类。然后,您可以设置一个代理来处理事件。
这是我用来做你想要的事情的东西。

参考“GridViewTraceListner”dll 创建一个窗口窗体,添加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.
public static void Log(string text)
{
    ConsoleTraceListener listener = new ConsoleTraceListener();
    Trace.Listeners.Add(listener);
    Trace.WriteLine(text);
    Trace.Listeners.Remove(listener);
    Trace.Close();
}
现在在你的“外部”dll和类似的东西

Logger.Log("MyTest"); // this is a method in the external dll.
public static void Log(string text)
{
    ConsoleTraceListener listener = new ConsoleTraceListener();
    Trace.Listeners.Add(listener);
    Trace.WriteLine(text);
    Trace.Listeners.Remove(listener);
    Trace.Close();
}

太宽泛了,一个建议是在dll中添加一个日志库,研究可用的选项并在exe中读取生成的文件。哇,这看起来真的很好。我对此一点也不熟悉,但我会仔细阅读。只需快速浏览一下,似乎会有所帮助。我想我会在EXE中设置一些侦听器类,等待某种事件?我将对此进行深入研究,但感谢您花时间阅读并提出建议。我不确定这与所问的问题有什么关系(这与能否在DLL中运行函数无关)。这个问题是关于在DLL执行功能时将状态传回可执行文件的问题。Ken是正确的,顺便说一句,我已经用EXE引用了它。我很抱歉。不知何故,我忽略了您已经在引用DLL的事实。我对我的答案做了更恰当的修改。没问题,卡梅隆,对不起,我本来会详细阐述的,但我的同事开始纠缠我。哈哈。至于你提到的那些设计模式,我才刚刚开始了解它们的存在。我已经开始了硕士课程,他们简短地说了一些话,但我承认我在那里也很无知,所以我现在要研究一下你的建议,也许我可以一石二鸟,工作和学校:)再次感谢他们,谢谢,我也会看这个。很抱歉反应太慢,我在工作中总是被拖入不同的事情中。。。。如果我能坐在这里,没有人纠缠我,哈哈,这似乎永远不会发生:)我会发布我最终使用的选项