private void Initialize() { HaloSize = 3; NearThreshold = 1589; FarThreshold = 1903; objectFilter = ObjectFilter.CreateObjectFilterWithGPUSupport(); // -- Initialize Relay commands -- InitializeRelayCommands(); // -- // -- Create observables to activate / deactivate recording and to start and stop processing -- var observableIsRecording = ObservableEx.ObservableProperty(() => IsRecording); observableIsRecording .Throttle(TimeSpan.FromMilliseconds(150)) .Subscribe(e => { if (e) { ActivateRecording(); } else { DeactivateRecording(); } }); var observableIsAvailable = Observable.FromEventPattern <bool>(KinectManager.Instance, "KinectAvailabilityChanged") .Select(e => e.EventArgs); StartProcessingSubscription = observableIsAvailable .CombineLatest(observableIsRunning, (available, running) => Tuple.Create(available, running)) .Where(tuple => tuple.Item1 && tuple.Item2) .Subscribe(_ => StartProcessing()); StopProcessingSubscription = observableIsAvailable .CombineLatest(observableIsRunning, (available, running) => Tuple.Create(available, running)) .Where(tuple => !tuple.Item1 || !tuple.Item2) .Subscribe(_ => StopProcessing()); InitializeReactiveCommands(); InitializeReactiveProperties(); // -- fpsTimer = Stopwatch.StartNew(); colorAndDepthFPSTimer = Stopwatch.StartNew(); }