Reativa Quadro .NET exemplos que comprovam a sua utilidade [fechado]
-
20-09-2019 - |
Pergunta
Houve algum hype em torno do novo Reativa Quadro em .NET 4.0.Enquanto eu acho que eu undestood seu conceito básico, eu não estou completamente convencido de que ele é útil.Você pode vir até com um bom exemplo (que é até meio fácil de entender) que totalmente mostra o poder e a utilidade de Rx?Mostrar algo que torna a vida muito mais fácil quando feito com Rx.
Solução
Aqui está um exemplo rápido.Programa de uma operação de arrastar em um totalmente declarativa forma, usando o LINQ para eventos.
//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 desenhar uma linha de startpos para pos atual
//Subscribe and draw a line from start position to current position
mouseDragPoints.Subscribe
(item =>
{
//Draw a line from item.Startpos to item.CurrentPos
}
);
Como você pode ver, não existem manipuladores de eventos em todo os lugares, nem as variáveis booleanas para gerir o estado.
Se você está curioso sobre os GetEventName() métodos, sugerindo que você leia este artigo inteiro e baixar o código fonte e jogar com ele.
Outras dicas
Eu escrevi uma demonstração passo a passo no meu blog recentemente: http://blog.andrei.rinea.ro/2013/06/01/bing-it-on-reative-extensions-story-code-and-slides/
Estou basicamente construindo um pequeno aplicativo no WPF com RX e Bing Search:
O aplicativo esperará até que você pare de digitar e, em seguida, faça uma pesquisa assíncrona e apresente os resultados. Se antes dos resultados chegarem, você emitiu outra pesquisa, ele soltará automaticamente a pesquisa existente.
Você pode forçar uma pesquisa (para pular o tempo de espera) pressionando Enter ou o "Go!" botão e pode parar uma pesquisa contínua pressionando o botão Limpar. Há um indicador ocupado e algum manuseio de erros (caso a rede caia, por exemplo).
Principais tópicos abordados:
- Criando um observável a partir de um evento (TextChanged, Button.Click etc)
- Delegado assíncrono (pesquisa assíncrona)
- Extensão de Takeuntil
- Extensão DistinctuntilChanged (incluindo iguais personalizados)
- Extensão de mesclagem
- Extensão do acelerador
- Observeon Extension (para sincronização de threads da interface do usuário)
.. e mais!