2011-05-10 3 views
1

Pourquoi un observateur observant un événement a-t-il manqué? L'événement n'est pas géré au moment où il se produit, donc l'état interne de l'objet n'est pas mis à jour et provoque des problèmes dans les événements suivants reçus. Peut-il être dû à ObserveOn NewThread?Evénements Reactive Extensions (Rx) Misses

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); 
         }); 
} 

Je peux voir que l'événement est reçu mais le code ci-dessus bloque!

+1

Vous aurez besoin de donner un exemple de code de travail pour que les gens puissent vous aider. – Nathan

+1

Cela dépend complètement du code que vous avez écrit. Fournir un exemple de code améliorera la qualité de la question et permettra aux autres de voir où vous pourriez avoir mal tourné. Pour le moment, votre question est trop vague et il est peu probable que vous ayez une réponse. –

Répondre

1

Votre exemple de code me convient, bien que l'utilisation de l'opérateur Take(1) se traduira seulement par attraper le premier événement à quel point le flux se terminera et vous ne recevrez aucune notification supplémentaire. Avez-vous l'intention de n'écouter qu'une seule notification d'événement?

Peut-être retirer Take (1) vous donnera le bon comportement?

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); 
     }); 
} 
+0

Le problème est résolu. Le blocage était dû à une modification de chaîne non synchronisée (absence de verrouillage). –

Questions connexes