Получение подходящего eventHandler после GetInvocationList () - PullRequest
2 голосов
/ 15 декабря 2011

у меня

public delegate void AdministrationEventHandler(object sender, AdministrationEventArgs e);
public static event AdministrationEventHandler MainAdministrationEventHandler;

Это основной обработчик событий в моей службе wcf. У меня также

private void MyEventHandler(object sender, AdministrationEventArgs e)
{
//code
}

Я добавляю новый элемент

AdministrationEventHandler userToAddEventHandler = new AdministrationEventHandler(MyEventHandler);

, а затем

MainAdministrationEventHandler += userToAddEventHandler;

В моем методе Broadcast() я вызываю MyEventHandler для каждого обработчика. Я хотел бы позвонить Broadcast() в соответствии с аргументом AdministrationEventArgs e.

Я пытался создать что-то вроде списка MainAdministrationEventHandler и вызвать Broadcast() для подходящего элемента этого списка, но это не работает.

Я получаю все обработчики на MainAdministrationEventHandler.GetInvocationList()

Возможно ли проверить e аргумент после его получения в GetInvocationList()?

или как я могу другим способом вызвать Broadcast() подходящим обработчикам?

1 Ответ

3 голосов
/ 15 декабря 2011

Какой подходящий обработчик? Потому что, основываясь на вашем коде, вы можете назначить для этого события только обработчики типа AdministrationEventHandler.

Кроме того, список, возвращаемый из GetInvocationList(), содержит только обработчики для вызова. На этот раз они еще не были вызваны, и вам нужно вызвать их и передать им e.

Что-то вроде этого должно сделать:

AdministrationEventArgs args = new AdministrationEventArgs();
Delegate[] dels = MainAdministrationEventHandler.GetInvocationList();
if (dels != null)
    foreach (Delegate handler in dels)
        handler.Invoke(this, args);
...