加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 订阅已加载程序集的事件

发布时间:2020-12-15 05:39:03 所属栏目:百科 来源:网络整理
导读:我试图在运行时加载程序集并订阅它的事件.在我的场景中,dll文件有一个ADD方法,它获取两个整数作为参数,并使用包含总和的自定义事件参数引发事件. 以下是加载Dll文件的代码的一部分: Assembly asm = Assembly.LoadFile(@"C:ProjectsDll1.Dll");Type typ =
我试图在运行时加载程序集并订阅它的事件.在我的场景中,dll文件有一个ADD方法,它获取两个整数作为参数,并使用包含总和的自定义事件参数引发事件.

以下是加载Dll文件的代码的一部分:

Assembly asm = Assembly.LoadFile(@"C:ProjectsDll1.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; }
        }
    }
}

解决方法

只需拿走你已经拥有的ev1并像这样拨打 AddEventHandler
ev1.AddEventHandler(obj,MyEventHandlerMethod);

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

ev1.RemoveEventHandler(obj,MyEventHandlerMethod);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读