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); 但是,您需要确保通过调用 ev1.RemoveEventHandler(obj,MyEventHandlerMethod); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Swift:“failable initializer’init()’不能覆盖不可用的
- 如何在iPhone应用程序中捕获所有异常
- c# – 带有构建器模式的“dynamic”关键字隐藏扩展方法
- 基于Cocos2dx引擎UI扩展引擎包[cocos2d-x-3c]
- ruby-on-rails – Sphinx delta索引 – 仍然需要重建主索引
- 混合模式程序集是针对“v1.1.4322”版的运行时生成的,在没有
- c# – vcruntime140.dll vs vcruntime140d.dll
- Vue自定义指令封装节流函数的方法示例
- flex module加载以后丢失样式
- 为什么Ruby在做同样的事情时会有拉链和转置?