Associare un delegato tramite reflection
In questo esempio viene mostrato come collegarsi ad un delegato utilizzando reflection.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
namespace ConnectToADelegateUsingReflection
{
class Program
{
static void Main(string[] args)
{
MyEventGenerator myEventGenerator = new MyEventGenerator();
EventInfo myEventInfo = typeof(MyEventGenerator).GetEvent("MyEvent");
MethodInfo methodInfo = typeof(Program).GetMethod("OnMyEvent",
BindingFlags.NonPublic | BindingFlags.Static);
Delegate @delegate = Delegate.CreateDelegate(
myEventInfo.EventHandlerType, methodInfo);
myEventInfo.GetAddMethod()
.Invoke(myEventGenerator, new Object[] { @delegate });
Console.WriteLine("Press ENTER to exit");
Console.ReadLine();
}
static void OnMyEvent(Object sender, EventArgs e)
{
Console.WriteLine("MyEvent received");
}
}
class MyEventGenerator
{
public event EventHandler MyEvent;
public MyEventGenerator()
{
new Thread(delegate()
{
while (true)
{
try
{
if (MyEvent != null)
MyEvent(this, EventArgs.Empty);
}
finally
{
Thread.Sleep(1000);
}
}
}).Start();
}
}
}
ConnectToADelegateUsingReflection.zip