5
我想在运行时加载程序集并订阅其事件。在我的场景中,dll文件具有一个ADD方法,该方法获取两个整数作为参数,并用包含总和的自定义事件参数引发一个事件。订阅装入程序集的事件
这里是我的代码的一部分来加载DLL文件:
Assembly asm = Assembly.LoadFile(@"C:\Projects\Dll1.Dll");
Type typ = asm.GetType("DLL1.Class1", true, true);
var method = typ.GetMethod("add");
var obj = Activator.CreateInstance(typ);
EventInfo ev1 = typ.GetEvents()[0]; // just to check if I have the proper event
Type tDelegate = ev1.EventHandlerType; // just to check if I have the proper delegate
method.Invoke(obj, new object[] { 1, 0 });
但是,我不知道如何订阅由大会提出的事件。任何帮助,将不胜感激。
补充:例如DLL源
namespace Dll1
{
public class Class1
{
int c = 0;
public void add(int a, int b)
{
c = a + b;
if (Added !=null)
Added(this, new AddArgs(c));
}
public delegate void AddHandler(object sender, AddArgs e);
public event AddHandler Added;
}
public class AddArgs : EventArgs
{
private int intResult;
public AddArgs(int _Value)
{
intResult = _Value;
}
public int Result
{
get { return intResult; }
}
}
}
谢谢,但还有两个问题。基于AddEventHandler页面,我需要创建一个动态程序集和事件处理程序,以便与加载程序集中的委托具有相同的签名。 1)该示例没有显示如何获得ILGenerator的返回结果。 2)如果我事先知道签名,是否有更简单的方法来编写MyEventHandler方法?如果有帮助,我已将示例Dll的源代码添加到问题中。 – Afshin