У меня есть следующая строка в C #:
_timer.ElapsedTick += _somefunction1;
_timer.ElapsedTick += _somefunction2;
_timer.ElapsedTick += _somefunction3;
Как вызвать все методы, подписанные на _timer.ElapsedTick, без указания функции _some?Где-то вдоль этой псевдолинии
invoke(_timer.ElapsedTick);
Ваша помощь очень ценится.
Обновление
Пример от @ M.Babcock работает.Метод FireEvent делает волшебство.Спасибо.
class InvokeFromMe
{
public event EventHandler RaiseMe;
}
class MainClass
{
public MainClass()
{
InvokeFromMe fromMe = new InvokeFromMe();
fromMe.RaiseMe += fromMe_RaiseMe;
fromMe.RaiseMe += fromMe_RaiseMe1;
FireEvent(fromMe, "RaiseMe", null, EventArgs.Empty);
//works
System.Timers.Timer _timer = new System.Timers.Timer();
_timer.Elapsed += _timer_Elapsed;
FireEvent(_timer, "onIntervalElapsed", null, null);
//throws exception
}
private void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
Console.WriteLine("_timer_Elapsed raised");
}
private void fromMe_RaiseMe(object sender, EventArgs e)
{
Console.WriteLine("Event Handler 0 Raised");
}
private void fromMe_RaiseMe1(object sender, EventArgs e)
{
Console.WriteLine("Event Handler 1 Raised");
}
public void FireEvent(object onMe, string invokeMe, params object[] eventParams)
{
MulticastDelegate eventDelagate =
(MulticastDelegate)onMe.GetType().GetField(invokeMe,
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.NonPublic).GetValue(onMe);
Delegate[] delegates = eventDelagate.GetInvocationList();
foreach (Delegate dlg in delegates)
{
dlg.Method.Invoke(dlg.Target, eventParams);
}
}
}
class Program
{
static void Main(string[] args)
{
MainClass m = new MainClass();
}
}