Пример #1
0
        public override async Task <IImageSourceServiceResult <Drawable>?> GetDrawableAsync(IImageSource imageSource, Context context, CancellationToken cancellationToken = default)
        {
            var streamImageSource = (IStreamImageSource)imageSource;

            if (!streamImageSource.IsEmpty)
            {
                Stream?stream = null;

                try
                {
                    stream = await streamImageSource.GetStreamAsync(cancellationToken).ConfigureAwait(false);

                    var drawableCallback = new ImageLoaderResultCallback();

                    PlatformInterop.LoadImageFromStream(context, stream, drawableCallback);

                    var result = await drawableCallback.Result.ConfigureAwait(false);

                    stream?.Dispose();

                    return(result);
                }
                catch (Exception ex)
                {
                    Logger?.LogWarning(ex, "Unable to load image stream.");
                    throw;
                }
                finally
                {
                    if (stream != null)
                    {
                        GC.KeepAlive(stream);
                    }
                }
            }

            return(null);
        }