Reactive Extensions (Rx) пропускает событие - PullRequest
1 голос
/ 10 мая 2011

Почему приемник наблюдает за пропущенным событием? Событие не обрабатывается во время его возникновения, поэтому внутреннее состояние объекта не обновляется и вызывает проблемы в следующих полученных событиях. Может ли это быть из-за ObserveOn NewThread?

private void UpdateList(Client client)
{
    var listUpdateReceive = Observable
        .FromEvent<ListEventArgs>(ev => client.ListUpdateReceive += ev, ev => client.ListUpdateReceive -= ev);

    listUpdateReceive.Take(1)
        .Subscribe(r =>
                       {
                           TraceInformation("List is updated.");

                           OnListUpdateReceived(r.Sender, r.EventArgs);
                       });
}

Я вижу, что событие получено, но код выше блокирует!

1 Ответ

1 голос
/ 10 мая 2011

Ваш пример кода выглядит нормально для меня, хотя использование оператора Take(1) приведет только к перехвату только первого события, после которого поток завершится, и вы не получите никаких дополнительных уведомлений. Вы намерены слушать только одно уведомление о событии?

Возможно, удаление Take (1) даст вам правильное поведение?

private void UpdateList(Client client)
{
    var listUpdateReceive = Observable
        .FromEvent<ListEventArgs>(ev => client.ListUpdateReceive += ev, ev => client.ListUpdateReceive -= ev);

    listUpdateReceive.Subscribe(r =>
        {
           TraceInformation("List is updated.");

           OnListUpdateReceived(r.Sender, r.EventArgs);
        });
}
...