Старая версия этого вопроса стала слишком длинной, поэтому к концу многочисленных попыток решить эту проблему я пришел к выводу, что все можно свести к простому вопросу.Почему это приводит к SystemObjectDisposed.
private async void PickPhotoButton_OnClicked(object sender, EventArgs e)
{
_globalStream = await DependencyService.Get<IPicturePicker>
().GetImageStreamAsync();
_globalArray = StreamToByteArray(_globalStream);
var gal = new GalleryResource()
{
Pic = _globalArray
};
MemoryObjects.CurrentGallery = gal;
var ctr = HelperMethods.GetInstance<GalleryController>();
await ctr.Post();
}
public byte[] StreamToByteArray(Stream input)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
}
Поток поступает с нативной стороны, я превращаю его в байтовый массив и передаю в мой репозиторий.Каждый работает с фиктивным байтовым массивом, поэтому что-то не так с объектом потока, который, возможно, закрывается или удаляется в точке.
В этот момент в хранилище выдается исключение:
var response =await _client.PostAsync (endPoint, _repService.ConvertObjectToStringContent (obj));
ConvertObjectToStringContent (obj) - не эта его часть.Отсюда он на самом деле возвращает значение, а байтовый массив виден внутри отладки, т.е.байтовый массив остается с действительной длиной до конца.
Единственное событие, которое имеет место, когда мы заканчиваем выбирать фотографию из библиотеки, это следующее:
void OnImagePickerFinishedPickingMedia(object sender,
UIImagePickerMediaPickedEventArgs args)
{
UIImage image = args.EditedImage ?? args.OriginalImage;
if (image != null)
{
// Convert UIImage to .NET Stream object
NSData data = image.AsJPEG(1);
Stream stream = data.AsStream();
// Set the Stream as the completion of the Task
taskCompletionSource.SetResult(stream);
}
else
{
taskCompletionSource.SetResult(null);
}
imagePicker.DismissModalViewController(true);
}
Однако этопохоже, что он не располагает потоком, и даже если он это сделал, мы уже получили от него байтовый массив.
Попытка даже сделать это внутри собственного кода
var client = new HttpClient();
var c = new MultipartFormDataContent();
c.Add(new StreamContent(image.AsJPEG(1).AsStream()));
var response = await client.PostAsync(Settings.EndPoint + "api/gallery/", c);
Та же ошибка.