public static async Task<ScannerAutoFocus> StartAsync(FocusControl control) { var autoFocus = new ScannerAutoFocus(control); AutoFocusRange range; if (control.SupportedFocusRanges.Contains(AutoFocusRange.FullRange)) { range = AutoFocusRange.FullRange; } else if (control.SupportedFocusRanges.Contains(AutoFocusRange.Normal)) { range = AutoFocusRange.Normal; } else { // Auto-focus disabled return autoFocus; } FocusMode mode; if (control.SupportedFocusModes.Contains(FocusMode.Continuous)) { mode = FocusMode.Continuous; } else if (control.SupportedFocusModes.Contains(FocusMode.Single)) { mode = FocusMode.Single; } else { // Auto-focus disabled return autoFocus; } if (mode == FocusMode.Continuous) { // True continuous auto-focus var settings = new FocusSettings() { AutoFocusRange = range, Mode = mode, WaitForFocus = false, DisableDriverFallback = false }; control.Configure(settings); await control.FocusAsync(); } else { // Simulated continuous auto-focus var settings = new FocusSettings() { AutoFocusRange = range, Mode = mode, WaitForFocus = true, DisableDriverFallback = false }; control.Configure(settings); var ignore = Task.Run(async () => { await autoFocus.DriveAutoFocusAsync(); }); } return autoFocus; }