У вас есть несколько вариантов в этом случае.Первый заключается в предоставлении делегата, который соответствует стандартному шаблону EventHandler (результирующая наблюдаемая имеет тип IObservable<SomeEventArgs>
).Обратите внимание, что предоставленная мной лямда принимает "o
" ("отправитель"), но этот параметр не используется:
IObservable<SomeEventArgs> eventAsObservable =
Observable.FromEvent<SomeEventArgs>
(
ev => GenericEvent += (o,e) => ev(e),
ev => GenericEvent -= (o,e) => ev(e)
);
Особенно в вашей ситуации (статическое событие ... yikes!), Я быбудьте осторожны, полагая, что отмена подписки действительно очистит должным образом, и вы можете получить неприятную утечку памяти в зависимости от использования.В качестве альтернативы вы можете указать тип делегата.Обратите внимание, что дополнительный универсальный параметр для FromEvent
IObservable<SomeEventArgs> eventAsObservable =
Observable.FromEvent<EventHandler<SomeEventArgs>, SomeEventArgs>
(
ev => GenericEvent += ev,
ev => GenericEvent -= ev
);
Еще одна альтернатива, которая перемещает обработку объекта источника / отправителя в Observer (делая наблюдаемый типа IObservable<EventPattern<SomeEventArgs>>
), заключается в использовании FromEventPattern
метод.У меня были небольшие проблемы с этим методом в некоторых сборках, поэтому ваш пробег может отличаться, но вот альтернатива:
IObservable<EventPattern<SomeEventArgs>> eventAsObservable =
Observable.FromEventPattern<SomeEventArgs>
(
ev => GenericEvent += ev,
ev => GenericEvent -= ev
);
Надеюсь, это немного поможет.