Esempio n. 1
0
        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);
                });
            }
        }
Esempio n. 2
0
        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);
        }