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.

Foi útil?

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.

Leia aqui e jogar com a fonte >>

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:

enter image description here

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top