Возможно, слишком поздно, но я предлагаю использовать строго типизированный метод FromEventPattern
всякий раз, когда вы хотите, чтобы наблюдаемое из события.
IObservable<IEvent<TEventArgs>> FromEventPattern<TDelegate, TEventArgs>(
Func<EventHandler<TEventArgs>, TDelegate> conversion,
Action<TDelegate> addHandler,
Action<TDelegate> removeHandler)
where TEventArgs: EventArgs
В вашем коде вы использовали бы его так:1005 *
public partial class MainWindow : Window
{
/// <summary>
/// Initializes a new instance of the <see cref="MainWindow"/> class.
/// </summary>
public MainWindow()
{
InitializeComponent();
var xs = Observable
.FromEventPattern<MouseButtonEventHandler, MouseButtonEventArgs>(
h => (s, ea) => h(s, ea),
h => this.MouseDown += h,
h => this.MouseDown -= h);
_subscription = xs
.ObserveOnDispatcher()
.Subscribe(_ => txtClicked.Text = "Clicked");
}
private IDisposable _subscription = null;
}
Также вы должны использовать переменную подписки (или список подписок) для хранения IDisposable
, возвращенного из вызова Subscribe
.И так же, как удаление обработчика событий при закрытии формы, вы также должны утилизировать свою подписку, когда закончите.