101 Примеры Rx

EDIT: Спасибо за ссылку на wiki, я думаю, что с тех пор, как она уже началась там, ее проще туда добраться, чтобы проверить ее. Однако вопрос здесь также хорош, поэтому люди, которые не знакомы с форумами msdn, узнают о вики и где он находится.

Короткий вопрос:

Есть ли у вас образец кода Rx, который может помочь людям понять его лучше?

Длинный рассвет со скрытым вопросом:

Теперь, когда была выпущена Rx framework, я думаю, что многие из нас заинтересованы в том, чтобы получить бит и попробовать их. К сожалению, на самом деле не так много примеров (после исчерпывающего поиска я почти убежден, что Rx предназначался только для легкого перетаскивания в приложениях wpf).

Я не могу вспомнить, где именно я читал или слышал (я смотрел много блогов и видеороликов), что команда Rx, похоже, заинтересована в том, чтобы делать серии 101... когда они получают достаточно времени чтобы сделать это..., что в значительной степени отстой для тех, кто хочет понять это и играть с ним сейчас (и я имею в виду, что уважаемый самоуважением разработчик не чувствует себя ребенком с новой игрушкой, когда новая технология. появляется).

Я лично пробовал сейчас, но ничего себе в нем есть какие-то сумасшедшие понятия... просто чтобы иметь имена методов, такие как Материализовать и Почтовый индекс, делает меня подумайте о Teleporters и материалах от Back to the Future.

Итак, я думаю, было бы неплохо, если бы те, кто с большим пониманием, помогли собрать коллекцию примеров, ala 101 Linq Examples, которая идет от базового использования до более сложных вещей и в значительной степени охватывают все методы и их использование практическим способом (возможно, с небольшой теорией тоже, особенно потому, что, вероятно, это требуется для такого рода понятий)

Я думаю, что это здорово, что MS-разработчики требуют времени, чтобы дать нам такой материал, но я также думаю, что это сообщество достаточно хорошо, чтобы начать строить наш собственный материал, не так ли?

Ответ 1

У меня были подобные мысли пару дней назад. Мы начали свои собственные "101 Rx Samples" в качестве сообщения в форуме Rx MSDN, но с тех пор мы переместили его в формат Wiki. Пожалуйста, не стесняйтесь приходить и добавлять свои собственные образцы!

101 Rx Образцы на Rx wiki

Ответ 2

Для начала - Вот простое приложение рисования, так что, когда пользователь перетягивает, мы рисуем красную линию от начальной позиции мыши до текущего местоположения, а также синее пятно в текущем местоположении. Это результат моей последней недели взлома Rx

A WPF Drawing Demo

И вот исходный код.

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

Читайте мой пост с дальнейшим объяснением здесь и Загрузите источник код здесь

Надеюсь, что это поможет

Ответ 3

Другим полезным ресурсом может быть Reactive Extensions (Rx) Koans: 55 прогрессивных примеров, которые помогут вам изучить Rx

Ответ 4

Я читаю http://www.introtorx.com, который, как и название, кажется, представляет собой краткое введение. Похоже, поэтапно много (очень простых) примеров, в основном используя консоль для печати материала.

Ответ 5

Здесь моя вариация на перетаскивание образца Wes Dyer для Windows Forms (я бы сделал EnableDragging методом расширения, возможно ):

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

Ответ 6

Немного поздно, но если кто-то новый наткнулся на этот вопрос, http://rxmarbles.com/ обеспечивает очень хороший способ визуализации операторов.

Ответ 7

И Просмотр содержимого на Github введите описание изображения здесь

  • SteamProvider вытаскивает сервер и генерирует поток RX.NET IObservable.
  • SteamAggregator объединяет все потоки IObservable и дублирует результат в центральный поток обработки.
  • Представления фильтруют один поток и дублируют результат в свои потоки для отображения.

Все StreamProviders, StreamAggregate и Views запускаются в своих потоках. Это также типичная модель поточной обработки приложений для просмотра в реальном мире.

Этот пример также может быть простым скелетом теста производительности для WPF DataGrid. Он вычисляет обработку тиков/секунд и отображает его в представлении.