Reactive Extensions(Rx)错过事件

时间:2011-05-10 07:21:50

标签: c# events scheduling system.reactive

为什么rx观察到的事件错过了?事件在发生时不会被处理,因此对象的内部状态不会更新,并导致接收到的以下事件出现问题。 可以归结为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 个答案:

答案 0 :(得分:1)

您的代码示例对我来说很合适,但使用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);
        });
}