пытаясь сохранить мой поток в моей модели представления - PullRequest
1 голос
/ 29 января 2020

У меня проблемы с сохранением потока моей выбранной картинки из моей галереи. это то, что я пытаюсь.

Stream stream = _stream = await DependencyService.Get<IPhotoPickerService>().GetImageStreamAsync();

if (stream != null)
{
    ItemPic = (StreamImageSource)ImageSource.FromStream(() => stream);
}

_stream также является потоком, и изображение отображается в моем приложении, но мое поле _stream пусто

1 Ответ

2 голосов
/ 29 января 2020

Я предполагаю, что вы пытаетесь кэшировать поток, используя поле _stream для дальнейшего использования. Поскольку класс. net Stream реализует интерфейс IDisposable , он полагается на то, что вы освободите этот неуправляемый ресурс вручную (в отличие от сборщика мусора, делающего это за вас).

Я бы предпочел кэшировать данные основного потока и избавиться от потока вместо того, чтобы пытаться удержать его.

using(Stream stream = await DependencyService.Get<IPhotoPickerService>().GetImageStreamAsync())
{
   if (stream != null)
   {
      // save stream data as an byte array 
      _streamData = ReadBytes(stream);
      ItemPic = GetImageSource(_streamData);
   }
}

// a helper method to get the stream data
private byte[] ReadBytes(Stream input)
{
    using (MemoryStream ms = new MemoryStream())
    {
        input.CopyTo(ms);
        return ms.ToArray();
    }
}

// a helper method to create an image from an byte array
private ImageSource GetImageSource(byte[] data)
{
   return ImageSource.FromStream(() => new MemoryStream(data)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...