7
votes

Est-il possible de remplacer la manipulation des événements traditionnels en C # avec le nouveau cadre réactif?

Tous les exemples sur system.reactive.dll J'ai vu jusqu'à présent accord avec les événements, eventargs et EventHandlers, je me demande si quelqu'un peut me montrer un exemple où la notification d'événement est traitée sans cela.

Par exemple, dans le cadre XNA de Microsoft, vous avez une méthode statique appelée Mouse.getState () qui retournera le malestate actuel (avec Mousestate.Leftbutton == boutonState.primé, vous pouvez voir si le bouton gauche est enfoncé, par exemple ). Donc, il n'y a pas d'éventuels, d'événements, etc. En premier lieu et je pense que cela pourrait servir d'exemple de notification d'événement sans introduire le concept d'événement.

pourrait être système.Reactif être utile ici? Quelqu'un peut-il envelopper cela dans un exemple avec système.Reactive?


1 commentaires

3 Réponses :


2
votes

Sondage de la souris ou des États du clavier fonctionne dans un jeu où vous avez un accès direct aux méthodes de mise à jour qui sont le rythme cardiaque de l'application. La méthode de mise à jour est votre événement appelé et transmis à de nombreux objets, pas très différent de MouseDown. Donc, même ici, vous vous appelez sur le modèle d'observateur.


1 commentaires

Je sais que, mais c'était une question spécifique concernant System.Reactive.dll et ses interfaces IOBSERVER , IOBSERVER



3
votes

citation d'un article que j'ai trouvé Utile:

en C #, un programmeur utilise programmation réactive chaque fois qu'il Spécifie un rappel pour un Opération asynchrone ou un gestionnaire pour un événement. Quand l'asynchrone opération termine ou quand le traitement événement a lieu, une méthode obtient appelé et exécuté comme une réaction à l'événement.

souris.getstate () est une méthode qui obtient l'état actuel de la souris. La programmation réactive serait utile si vous essayiez de manipuler en permanence (réagir à) les modifications apportées à l'état de la souris.

Par exemple, vous pouvez créer une enveloppe qui sondre en permanence l'état de la souris, puis notifie ses observateurs (essentiellement retour aux événements de publication ici). Vous pouvez ensuite écrire du code pour gérer (réagir à) ces mises à jour.


0 commentaires

0
votes

Vous pouvez créer des observables d'événements existants. Vous pouvez utiliser Observable.fromevent à cette fin. Vous pouvez écrire une enveloppe d'événement getMouseDown, comme une méthode d'extension d'un élément UI. XXX PRE>

et plus tard, vous pouvez "gérer" votre événement de manière totalement déclarative. Comme p> xxx pré>

et voici comment créer un "glisser" observable, avec la position initiale et la position actuelle. P>

  //Get the initial position and dragged points using LINQ to Events
            var mouseDragPoints = from md in e.GetMouseDown()
                                  let startpos=md.EventArgs.GetPosition(e)
                                  from mm in e.GetMouseMove().Until(e.GetMouseUp())
                                  select new
                                  {
                                      StartPos = startpos,
                                      CurrentPos = mm.EventArgs.GetPosition(e),
                                  };


 //And subscribe here to mouseDragPoints


1 commentaires

Remarque, vous pouvez décoder vos propres implémentations iobservables et iobserver en C # 3.0, mais malheureusement, vous ne pouvez malheureusement pas utiliser la syntaxe ci-dessus pour Gevente, en raison de l'avertissement CS1911 ( msdn.microsoft.com/en-us/library/ms228459.aspx )