Esempi di Reactive Framework per .NET che ne dimostrano l'utilità [chiuso]
-
20-09-2019 - |
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.
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.
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:
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!