Вокруг новой версии Reactive Framework в .NET 4.0. Хотя я думаю, что понял его основную концепцию, я не полностью уверен, что он настолько полезен. Можете ли вы привести хороший пример (наполовину простой для понимания), который полностью демонстрирует мощь и полезность Rx? Покажите что-то, что делает жизнь намного проще, когда это делается с помощью Rx.
Примеры Reactive Framework для .NET, доказывающие его полезность
Ответы (2)
Вот быстрый пример. Запрограммируйте операцию перетаскивания в полностью декларативной манере, используя LINQ для событий.
//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),
};
И нарисуйте линию от начальной до текущей позиции
//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:
Приложение будет ждать, пока вы перестанете печатать, а затем выполнит асинхронный поиск и представит результаты. Если до того, как пришли результаты, вы выполните еще один поиск, он автоматически удалит существующий поиск.
Вы можете принудительно выполнить поиск (чтобы пропустить время ожидания), нажав ENTER или Go! кнопку и может остановить текущий поиск, нажав кнопку Очистить. Есть индикатор занятости и некоторая обработка ошибок (например, в случае отказа сети).
Основные затронутые темы:
- Создание наблюдаемого из события (TextChanged, Button.Click и т. д.)
- Асинхронный делегат (асинхронный поиск)
- Расширение TakeUntil
- Расширение DistinctUntilChanged (включая настраиваемые Equals)
- Объединить расширение
- Расширение дроссельной заслонки
- Расширение ObserveOn (для синхронизации потоков пользовательского интерфейса)
.. и больше!