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(); } }