Реактивный фреймворк для .NET с примерами, доказывающими его полезность [закрыт]

StackOverflow https://stackoverflow.com/questions/1756009

Вопрос

Вокруг нового продукта поднялся настоящий ажиотаж. Реактивный Фреймворк в .NET 4.0.Хотя я думаю, что не понял его основной концепции, я не совсем уверен, что он настолько полезен.Можете ли вы привести хороший пример (который наполовину прост для понимания), который полностью демонстрирует мощь и полезность Rx?Покажите что-то, что делает жизнь намного проще, когда это делается с помощью Rx.

Это было полезно?

Решение

Вот краткий пример.Запрограммируйте операцию перетаскивания полностью декларативным образом, используя LINQ to event.

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

И проведите линию от startpos до текущей позиции.

//Subscribe and draw a line from start position to current position  
            mouseDragPoints.Subscribe  
                (item =>  
                { 
                  //Draw a line from item.Startpos to item.CurrentPos
                }
                ); 

Как видите, здесь нет ни обработчиков событий, ни логических переменных для управления состоянием.

Если вам интересны эти методы GetEventName(), я предлагаю вам прочитать всю эту статью, загрузить исходный код и поиграть с ним.

Прочитайте это здесь и поиграйтесь с источником >>

Другие советы

Недавно я написал пошаговую демонстрацию в своем блоге : http://blog.andrei.rinea.ro/2013/06/01/bing-it-on-reactive-extensions-story-code-and-slides/

По сути, я создаю небольшое приложение в WPF с помощью Rx и Bing Search:

enter image description here

Приложение подождет, пока вы перестанете печатать, а затем выполнит асинхронный поиск и представит результаты.Если до получения результатов вы введете другой поиск, существующий поиск будет автоматически удален.

Вы можете принудительно запустить поиск (чтобы пропустить время ожидания), нажав клавишу ENTER или кнопку "Перейти!", а также остановить текущий поиск, нажав кнопку Очистить.Есть индикатор занятости и некоторая обработка ошибок (например, на случай отключения сети).

Основные затронутые темы :

  • Создание наблюдаемого объекта на основе события (TextChanged, Button.Click и т.д.)
  • Асинхронный делегат (асинхронный поиск)
  • Расширение takeUntil
  • Расширение distinctUntilChanged (включая пользовательские значения)
  • Расширение слияния
  • Удлинитель дроссельной заслонки
  • Расширение observeOn (для синхронизации потоков пользовательского интерфейса)

..и даже больше!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top