1
Event
の代理人を動的に作成する最良の方法は、どのようにターゲットMethodInfo
にはEvent
と異なるパラメータがありますか?ここでターゲットメソッドのパラメータが異なるイベントのデリゲートを作成するにはどうすればよいですか?
は私のクラスのコードです:ここで
public class Class1
{
public event EventHandler<EventArgs> refresh;
public void AddHandlerToEventInfo(EventInfo eventInfo, string methodInfoName)
{
Type tDelegate = eventInfo.EventHandlerType;
var sourceType = this.GetType();
Delegate d = Delegate.CreateDelegate(tDelegate, this, methodInfoName);
MethodInfo addHandler = eventInfo.GetAddMethod();
Object[] addHandlerArgs = { d };
addHandler.Invoke(this, addHandlerArgs);
}
public void HandleEvent(object sender, EventArgs e)
{
}
public void Test()
{
}
}
はClass1
を呼び出すためのコードである:ここでは
private void AddHandlers()
{
var class1 = new Class1();
var eventInfo = class1.GetType().GetEvent("refresh");
class1.AddHandlerToEventInfo(eventInfo, "HandleEvent");
class1.AddHandlerToEventInfo(eventInfo, "Test");
}
は例外です:
タイプ「システムの未処理の例外.ArgumentException 'が発生しました mscorlib.dll
追加情報: 署名またはセキュリティの透過性が デリゲートタイプのものと互換性がないため、ターゲットメソッドにバインドできません。例外はラインで発生している
:
Delegate d = Delegate.CreateDelegate(tDelegate, this, methodInfoName);
例外が発生している理由を私は理解し、質問は例外ではないですが、どのようにTest
メソッドのデリゲートを作成します。
'Test'メソッドを別のメソッドでラップします。 – Tommy
メソッドと一致しない型のデリゲートを作成しようとしています。あなたはそれをすることはできません。 – Blorgbeard
@ Tommy参考にしてもらえますか? – user3736648