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在做同样的事情时会有拉链和转置?
