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; }
        }
    }
}
4

1 回答 1

3

只需使用ev1您已经拥有的并AddEventHandler像这样调用:

ev1.AddEventHandler(obj, MyEventHandlerMethod);

但是,您需要确保通过调用来清理处理程序,RemoveEventHandler以便可以进行垃圾收集。

ev1.RemoveEventHandler(obj, MyEventHandlerMethod);
于 2013-04-15T19:25:58.793 回答