2013-02-14 6 views
0

Есть ли эквивалент CancelEventArg для RX? У меня есть обновления событий в моем репозитории, которые срабатывают перед сохранением. Я извлекаю InvocationList и перебираю каждый EventHandler, чтобы проверить, установлен ли флаг отмены для отмены сохранения. Я новичок RX и смотрю Семинар RX по Observable vs Events http://channel9.msdn.com/Series/Rx-Workshop/Rx-Workshop-Observables-versus-Events Мне было интересно, как я могу заменить EventHandler на тему и узнать, отменяет ли один из подписчиков событие.RX и CancelEventArg

Если я не могу преобразовать событие в тему, есть ли способ получить Observable для EventHandler и в OnNext получить доступ к отправителю и CancelEventArgs из вызова EventHandler?

+0

Даже если вы можете написать тему, которая позволяет останавливать уведомления для своих подписчиков, это не рекомендуется. Ищите альтернативный способ моделирования проблемы без изменчивости. – Asti

ответ

0

С Observable.FromEvent у вас есть доступ к событиям args, например, например. здесь:

IObservable<Key> keyPress = 
    Observable.FromEvent<KeyEventArgs>(Application.Current.RootVisual, "KeyUp") 
     .Select(ev => ev.EventArgs.Key); 

Таким образом, вы должны иметь возможность установить значение любого свойства в событиях args.

Обратите внимание, что у вас есть проблема с дизайном здесь: Отмена - это то, что вы уже должны быть осторожны в нормальном контексте, но смешение событий отмены и асинхронных путей выполнения может позже стать кошмаром для обслуживания. Используйте шаблон производителя-потребителя здесь и думайте об этом как об одностороннем сообщении: вы реагируете на событие, вы не должны его менять. Если вам нужно изменить его, используйте фильтр (через утилиты Rx).

Смежные вопросы