小编Mek*_*ebo的帖子

CreateDelegate:“无法绑定到目标方法,因为其签名与委托类型的签名不兼容。”

我遇到了一个我不明白的奇怪问题。

我想做的事情非常简单:动态加载程序集,找到具有预定义名称的事件并挂钩到该事件。

执行此操作的代码很简单:

private void AttachToEvent(Type type)
{
    if (type == null) return;

    foreach (var @event in type.GetEvents())
    {
        if (@event.Name != EVENTNAME) continue;

        var eventHandler = typeof(Handler).GetMethod(DELEGATEMETHOD, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);

        if (@event == null || eventHandler == null) return;

        var @delegate = Delegate.CreateDelegate(@event?.EventHandlerType, eventHandler);

        @event.AddEventHandler(type, @delegate);
    }
}
Run Code Online (Sandbox Code Playgroud)

定义DELEGATEMETHOD如下:

public void LogHandler(DateTime dateTime, string connectorName, string severity, string details)
{
  // do something with the received log event...
}
Run Code Online (Sandbox Code Playgroud)

在加载的程序集中,事件定义如下:

public delegate void LogHandler(DateTime dateTime, …
Run Code Online (Sandbox Code Playgroud)

c#

2
推荐指数
1
解决办法
5121
查看次数

标签 统计

c# ×1