Допустим, у вас есть класс API.
В нем, у вас есть вот такой event:
public event TokenRecivedEventHandler OnTokenRecived;
и метод:
public async Task GetTokenEvtAsync(Models.LoginViewModel loginModel)
{
var response = await GetToken(loginModel);
OnTokenRecived?.Invoke(this, new TokenRecivedEventArgs(response));
}
В другом месте(классе, форме и т.п) вы делаете:
var api = new API();
api.OnTokenRecived += Api_OnTokenRecived;
api.OnTokenRecived += Api_OnTokenRecived2;
await api.GetTokenEvtAsync(loginModel: viewModel);
api.OnTokenRecived -= Api_OnTokenRecived;
api.OnTokenRecived -= Api_OnTokenRecived2;
И два обработчика:
private void Api_OnTokenRecived(object sender, TokenRecivedEventArgs args)
{
TokenDecoder.Decode(args.Token, tokenResult);
}
private void Api_OnTokenRecived2(object sender, TokenRecivedEventArgs args)
{
buttonLogin.Enabled = false;
buttonLogout.Enabled = !buttonLogin.Enabled;
buttonApiGetUser.Enabled = !buttonLogin.Enabled;
buttonApiGetUserFields.Enabled = !buttonLogin.Enabled;
}
И все. Примеры взяты из рабочего кода и адаптированы под условие вопроса. Все работает. Вы просто вешаете два обработчика на свое событие.
Другой вопрос, если вам нужно чтобы выполнялось с определенной очередностью, тут вам без Event Aggregator-а не обойтись, с нестандартной логикой.
P.S. Если вам не два обработчика нужно, а именно какое-то дополнительное действие, то тут немного по-другому.
private EventHandler _eventHandler;
public event EventHandler OnCustomEvent
{
add
{
_eventHandler += value;
Log("Обработчик добавлен");
}
remove
{
_eventHandler -= value;
Log("Обработчик удален");
}
}