Example #1
0
        private async Task TryStartCalibrationAsync(ICalibrate calibrate)
        {
            if (CanCalibrate == false)
            {
                using (var cancellation = new CancellationDisposable())
                {
                    _cancellation = cancellation;

                    await AsyncHelper.InvokeAsync <EventHandler <bool>, bool>
                    (
                        () => { },
                        h => calibrate.CanCalibrateChanged += h,
                        h => calibrate.CanCalibrateChanged -= h,
                        tcs => (_, canCalibrate) =>
                    {
                        if (canCalibrate)
                        {
                            tcs.TrySetResult(canCalibrate);
                        }
                    },
                        cancellation.Token
                    );

                    OnPropertyChanged(nameof(CanCalibrate));

                    _cancellation = null;
                }
            }

            if (CanCalibrate)
            {
                var calibrator = calibrate.GetCalibrator();

                var calibratorViewModel = (CalibratorViewModel)_resolver.Create(calibrator);

                ApplySettings(calibratorViewModel);

                Navigation.NavigateToObject(calibratorViewModel);

                await CalibrateAsync(calibrator);
            }
            else
            {
                Complete();
            }
        }