c# - 如何动态订阅一个事件?

标签 c# .net reflection

相关


我需要检测事件何时触发。为此,我尝试动态订阅该事件。

问题是我有不同类型的代表,并非所有事件都具有相同的签名。提供的解决方案in herehere需要 object sender, EventArgs e,我没有使用它,所以我得到一个异常,告诉我类型不匹配。

以下是我拥有的委托(delegate)的一些示例:

public delegate void OnEventA(int id);
public delegate void OnEventB(double num, string name);

如何创建正确的委托(delegate)?

最佳答案

EventInfo 有一个您可以使用的方法 AddEventHandler。如果您没有委托(delegate)实例,则可以使用 Delegate.CreateDelegate 动态创建委托(delegate):

var eh = Delegate.CreateDelegate(ei.EventHandlerType, target, methodInfo);
ei.AddEventHandler(owner, eh);

在此示例中,target 是委托(delegate)的目标对象,methodInfotarget< 中方法的 MethodInfo/ 对象。最后,owner是事件ei所属的对象。

关于c# - 如何动态订阅一个事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3772005/

相关文章:

asp.net - 如何创建基于 .NET Core 而不是完整框架的 ASP.NET 项目?

java - 泛型作为方法返回类型

c# - C# 中基于 HMAC 的一次性密码 (RFC 4226 - HOTP)

c# - SharpSNMP 最大重复次数增加导致通过 GPRS 的缓冲区大小异常

c# - XML如何在同一个变量下有两个数字

.net - 如果字体从粗体更改为常规,则 TreeView 文本会被剪裁

.net - 带有验证和取消按钮的消息框

java - 使用 .getDeclaredMethod 从扩展另一个类的类中获取方法

c# - 在 Roslyn 中使用泛型生成有效类型名称的技术

c# - 在 'circular' 数组中寻找下一个位置