Domanda

C'è stato un certo clamore intorno al nuovo Quadro reattivo in .NET 4.0.Anche se penso di aver compreso il suo concetto di base, non sono completamente convinto che sia così utile.Riesci a trovare un buon esempio (che sia abbastanza facile da capire) che dimostri totalmente la potenza e l'utilità di Rx?Mostra qualcosa che rende la vita molto più semplice quando hai finito con Rx.

È stato utile?

Soluzione

Ecco un rapido esempio. Programmare un'operazione di trascinamento in maniera completamente dichiarativa, utilizzando LINQ agli eventi.

   //Create an observable with 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),
                           };

E tracciare una linea da startpos a pos corrente

//Subscribe and draw a line from start position to current position  
            mouseDragPoints.Subscribe  
                (item =>  
                { 
                  //Draw a line from item.Startpos to item.CurrentPos
                }
                ); 

Come si può vedere, non ci sono gestori di eventi in tutto i luoghi, né le variabili booleane per la gestione dello stato.

Se siete curiosi di sapere chi GetEventName () metodi, si suggerisce di leggere l'intero articolo e scaricare il codice sorgente e giocare con lui.

Leggi qui e giocare con la fonte >>

Altri suggerimenti

Di recente ho scritto una demo passo dopo passo sul mio blog: http://blog.andrei.rinea.ro/2013/06/01/bing-it-on-reactive-extensions-story-code-and-slides/

Fondamentalmente sto costruendo una piccola app in WPF con Rx e Bing Search:

enter image description here

L'app attenderà finché non smetterai di digitare, quindi eseguirà una ricerca asincrona e presenterà i risultati.Se prima che arrivino i risultati effettui un'altra ricerca, la ricerca esistente verrà automaticamente abbandonata.

Puoi forzare una ricerca (per saltare i tempi di attesa) premendo Invio o "Vai!" pulsante e può arrestare una ricerca in corso premendo il pulsante Cancella.È presente un indicatore di occupato e una certa gestione degli errori (ad esempio nel caso in cui la rete non funzioni).

Principali argomenti trattati:

  • Creazione di un osservabile da un evento (TextChanged, Button.Click ecc.)
  • Delegato asincrono (ricerca asincrona)
  • Estensione TakeUntil
  • Estensione DistinctUntilChanged (incluso Equals personalizzato)
  • Unisci estensione
  • Estensione dell'acceleratore
  • Estensione ObserveOn (per la sincronizzazione dei thread dell'interfaccia utente)

..e altro ancora!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top