2009-11-20 19 views
36

EDITAR: Gracias por el enlace a la wiki, creo que ya que comenzó allí, es más fácil ir allí para verlo. Sin embargo, la pregunta aquí también es buena, para que las personas que no están en los foros de msdn conozcan la wiki y dónde está.101 Rx Ejemplos

pregunta corta:

¿Tiene usted un ejemplo de código Rx que podría ayudar a la gente a entender mejor?

laberíntica largo con la pregunta oculta:

Ahora que el marco Rx ha sido liberado, creo que muchos de nosotros estamos interesados ​​en obtener los bits y de ponerlas en práctica. Lamentablemente, no hay muchos ejemplos por ahí (después de una búsqueda exhaustiva estoy casi convencido de que Rx solo pretendía hacer Arrastrar con facilidad en aplicaciones wpf).

No recuerdo exactamente dónde fue que leí u oí (he estado viendo muchos blogs y videos) que el equipo de Rx parece estar interesado en hacer la serie 101 ... cuando obtienen suficiente es hora de hacerlo ... lo que más bien apesta para aquellos que quieren entenderlo y jugar con él ahora (y quiero decir, lo que el desarrollador respetado no se siente como un niño con un juguete nuevo cuando se trata de una nueva tecnología. esto aparece).

Yo personalmente he estado dando una oportunidad ahora, pero ¡hay algunos conceptos locos en él ... sólo para tener nombres métodos como Materialise y postal me hace pensar en Teleportadores y cosas de Regreso al futuro.

Por lo tanto, creo que sería bueno que los que tienen una mayor comprensión, ayudaron a construir una colección de ejemplos, ala 101 Linq Ejemplos que van desde el uso básico a cosas más complejas, y casi cubrir la totalidad de la métodos y su uso, de una manera práctica (quizás con un poco de teoría también, especialmente ya que este tipo de conceptos probablemente lo requirieron)

Creo que es genial que los desarrolladores MS tomen tiempo para darnos material así, pero También creo que esta comunidad es lo suficientemente buena como para comenzar a construir nuestro propio material, ¿verdad?

+1

Por cierto, se olvidó de terminar su publicación.) –

+0

¿Y esta es una pregunta real o simplemente divaga? –

+0

No importa ... ha cambiado su publicación para incluir una pregunta ahora! –

Respuesta

25

realidad tenía pensamientos similares hace un par de días. Comenzamos nuestras propias "muestras 101 Rx" como una publicación en el foro Rx MSDN, pero desde entonces lo hemos movido a un formato Wiki. Por favor, siéntase libre de venir y agregar sus propias muestras!

101 Rx Samples on the Rx wiki

12

Para empezar: Aquí hay una aplicación de dibujo simple, de modo que cuando el usuario se arrastra, trazamos una línea roja desde la posición inicial del mouse hasta la ubicación actual, y también una mancha azul en la ubicación actual. Este es el resultado del corte de mi última semana en Rx

A WPF Drawing Demo

Y aquí está el código fuente.

//A draw on drag method to perform the draw 
void DrawOnDrag(Canvas e) 
     { 

      //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), 
            }; 


      //Subscribe and draw a line from start position to current position 
      mouseDragPoints.Subscribe 
       (item => 
       { 
        e.Children.Add(new Line() 
        { 
         Stroke = Brushes.Red, 
         X1 = item.StartPos.X, 
         X2 = item.CurrentPos.X, 
         Y1 = item.StartPos.Y, 
         Y2 = item.CurrentPos.Y 
        }); 

        var ellipse = new Ellipse() 
        { 
         Stroke = Brushes.Blue, 
         StrokeThickness = 10, 
         Fill = Brushes.Blue 
        }; 
        Canvas.SetLeft(ellipse, item.CurrentPos.X); 
        Canvas.SetTop(ellipse, item.CurrentPos.Y); 
        e.Children.Add(ellipse); 
       } 
       ); 
     } 

Read my post with further explanation here y Download the source code here

espero que esto ayude

4

Aquí es mi variante de la drag & drop sample by Wes Dyer, para Windows Forms (me gustaría hacer enableDragging un método de extensión, probablemente):

public Form2() 
    { 
     InitializeComponent(); 

     EnableDragging(pictureBox1); 
     EnableDragging(button1); 
     EnableDragging(this); 
    } 

    private void EnableDragging(Control c) 
    { 
     // Long way, but strongly typed. 
     var downs = from down in Observable.FromEvent<MouseEventHandler, MouseEventArgs>(
         eh => new MouseEventHandler(eh), 
         eh => c.MouseDown += eh, 
         eh => c.MouseDown -= eh) 
        select new { down.EventArgs.X, down.EventArgs.Y }; 

     // Short way. 
     var moves = from move in Observable.FromEvent<MouseEventArgs>(c, "MouseMove") 
        select new { move.EventArgs.X, move.EventArgs.Y }; 

     var ups = Observable.FromEvent<MouseEventArgs>(c, "MouseUp"); 

     var drags = from down in downs 
        from move in moves.TakeUntil(ups) 
        select new Point { X = move.X - down.X, Y = move.Y - down.Y }; 

     drags.Subscribe(drag => c.SetBounds(c.Location.X + drag.X, c.Location.Y + drag.Y, 0, 0, BoundsSpecified.Location)); 
    } 
5

Estoy leyendo http://www.introtorx.com, que como el nombre sugiere parece ser un conci se introducción. Parece que hay bastantes ejemplos (muy básicos), paso a paso, sobre todo usando la consola para imprimir cosas.

+0

Puede no ser pesado en ejemplos, pero es una muy interesante y vale la pena leer independientemente. –

1

Y un ejemplo Stock Viewer en Github enter image description here

  1. SteamProvider tira de un servidor y genera una corriente Rx.NET IObservable.
  2. SteamAggregator agrega todos los flujos IObservable y duplica el resultado en un hilo de procesamiento central.
  3. Las vistas filtran la secuencia única y duplican el resultado en sus propios subprocesos para su visualización.

Todos los StreamProviders, StreamAggregate y Views se ejecutan en sus propios hilos. Este es también un modelo típico de enhebrado de aplicaciones de visualización de stock en el mundo real.

Este ejemplo también puede ser un simple esqueleto de prueba de rendimiento para WPF DataGrid. Calcula ticks/segundo procesado y lo muestra en la Vista.

3

Un poco tarde, pero si alguien nuevo tropieza con esta pregunta, http://rxmarbles.com/ proporciona una forma muy agradable de visualizar a los operadores.