Пример #1
0
        public Form1()
        {
            InitializeComponent();

            startBtn.Click += (o, s) => runningEvent.Fire(true);

            stopBtn.Click += (o, s) =>
            {
                degreesSignal.Stop();
                runningEvent.Fire(false);
            };

            frequency.ValueChanged += (o, s) => intervalChanged.Fire(frequency.Value);

            degreesSignal = new Signal<double>(new AutoDouble(0.0, 0.001), Frequency.Hz(0.0), this.CreateDispatcher());
            degreesSignal.Subscribe(SetDegValue);

            signalTickCount = degreesSignal.Snapshot(new AutoLong());
            signalTickCount.Subscribe(SetTickCount);

            radiansSignal = degreesSignal.Map(d => d * RadsPerDeg);
            radiansSignal.Subscribe(SetRadValue);

            sineSignal = radiansSignal.Map(Math.Sin);
            sineSignal.Subscribe(SetSinValue);

            cosineSignal = radiansSignal.Map(Math.Cos);
            cosineSignal.Subscribe(SetCosValue);

            runningEvent = new FirableEvent<bool>();
            runningEvent.Subscribe(r => { degreesSignal.Running = r; });

            runningBehavior = runningEvent.Hold(false);
            runningBehavior.SubscribeWithInitialFire(EnableControls);

            intervalChanged = new FirableEvent<decimal>();
            intervalBehavior = intervalChanged.Hold(frequency.Value);
            intervalBehavior.Map(Frequency.Hz).SubscribeWithInitialFire(FrequencyChanged);
        }