partial void OnSourceChangedPartial(ImageSource newValue, ImageSource oldValue) { if (newValue == null || !newValue.HasSource()) { SetImage(null, failIfNull: false); oldValue?.Dispose(); _imageScheduler.Disposable = null; } else if (newValue.ImageData != null) { SetImage(newValue.ImageData); oldValue?.Dispose(); _imageScheduler.Disposable = null; } else { SetImage(null, failIfNull: false); oldValue?.Dispose(); _imageScheduler.Disposable = CoreDispatcher.Main.RunAsync( CoreDispatcherPriority.Normal, async ct => { var image = await Task.Run(async() => await newValue.Open(ct)); if (ct.IsCancellationRequested) { return; } SetImage(image); }); } }
private async void OpenImageAsync(ImageSource newValue) { CoreDispatcher.CheckThreadAccess(); using var cd = new CancellationDisposable(); _imageScheduler.Disposable = cd; var image = await Task.Run(() => newValue.Open(cd.Token), cd.Token); if (cd.Token.IsCancellationRequested) { return; } SetImage(image); }