Exemplo n.º 1
0
 public static void ObservableFromEventPattern_IsTheEventObserverPatternImplementationOnSteroids(Form form)
 {
     Observable.FromEventPattern <MouseEventArgs>(form, nameof(form.MouseClick))
     .Subscribe(
         mm => form.AppendToBox($"Clicked @ {mm.EventArgs.X} - {mm.EventArgs.Y}"),
         ex => form.AppendToBox(ex.Message));
 }
Exemplo n.º 2
0
        public static void DispatcherScheduler_CanBeUsedToEmitAndConsume_OnTheUIThread(Form form)
        {
            //Execution Context: UI Thread
            //Execution Policy: Priority FIFO (non-blocking)
            //Clock: Machine Time

            Observable.Interval(TimeSpan.FromMilliseconds(250), new DispatcherScheduler(Dispatcher.CurrentDispatcher))
            .Take(6)
            .Subscribe(i => form.AppendToBox($"Blipp{i}"));

            form.AppendToBox("Finished");
        }
Exemplo n.º 3
0
        public static void Throttle_GuardsAgainstPeaks_IsGreatForUserInteraction(Form form)
        {
            var moves = Observable.FromEventPattern <EventArgs>(form, nameof(form.Move));

            moves.Sample(TimeSpan.FromMilliseconds(500))
            .Timestamp()
            .ObserveOn(SynchronizationContext.Current)
            .Subscribe(m => form.AppendToBox($"Still moving it around, last one @{m.Timestamp}"));
            moves.Throttle(TimeSpan.FromMilliseconds(750))
            .Timestamp()
            .ObserveOn(SynchronizationContext.Current)
            .Subscribe(i => form.AppendToBox($"Blipped @{i.Timestamp}"), ex => form.AppendToBox(ex.Message));
        }
Exemplo n.º 4
0
            public static void Aggregate_IsPowerful_ButBoundByCompletion(Form form)
            {
                var moves        = Observable.FromEventPattern <MouseEventArgs>(form, nameof(form.MouseMove));
                var doubleClicks = Observable.FromEventPattern <EventArgs>(form, nameof(form.DoubleClick));

                moves.TakeUntil(doubleClicks)
                .Aggregate(
                    (start: DateTime.Now, distance: 0, previous: new MouseEventArgs(MouseButtons.None, 0, 0, 0, 0)),
                    (accumulator, current) =>
                {
                    accumulator.distance += Math.Abs(current.EventArgs.X - accumulator.previous.X);
                    accumulator.previous  = current.EventArgs;

                    return(accumulator);
                })
                .Subscribe(
                    agg => form.AppendToBox($"Moused a total of {agg.distance} pixels over a time period of {DateTime.Now.Subtract(agg.start)}"),
                    ex => form.AppendToBox(ex.Message));
            }
Exemplo n.º 5
0
            public static void Scan_IsJustAggregate_WithAllIntermediateSteps(Form form)
            {
                var moves        = Observable.FromEventPattern <MouseEventArgs>(form, nameof(form.MouseMove));
                var doubleClicks = Observable.FromEventPattern <EventArgs>(form, nameof(form.DoubleClick));

                var start = DateTime.Now;

                moves.TakeUntil(doubleClicks)
                .Scan(
                    (start, distance: 0, previous: new MouseEventArgs(MouseButtons.None, 0, 0, 0, 0)),
                    (accumulator, current) =>
                {
                    accumulator.distance += Math.Abs(current.EventArgs.X - accumulator.previous.X);
                    accumulator.previous  = current.EventArgs;

                    return(accumulator);
                })
                .Subscribe(
                    agg => form.AppendToBox($"Moused a total of {agg.distance} pixels *so far*"),
                    ex => form.AppendToBox(ex.Message),
                    () => form.AppendToBox($"Moused over a time period of {DateTime.Now.Subtract(start)}"));
            }