Asp.net &引用;无法访问disposedObject“;尝试向服务器发送字节[]时Xamarin中出现异常

Asp.net &引用;无法访问disposedObject“;尝试向服务器发送字节[]时Xamarin中出现异常,asp.net,.net,api,xamarin,Asp.net,.net,Api,Xamarin,这个问题的旧版本太长了,所以在解决这个问题的无数尝试结束时,我提出了一个简单的问题。为什么会产生SystemObjectDisposed private async void PickPhotoButton_OnClicked(object sender, EventArgs e) { _globalStream = await DependencyService.Get<IPicturePicker> ().G

这个问题的旧版本太长了,所以在解决这个问题的无数尝试结束时,我提出了一个简单的问题。为什么会产生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 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);

同样的错误。

我想你的问题在这行的某个地方
\u byteArray=ToByteArray(\u array)

ToByteArray(stream)
似乎通过从流转换返回字节数组,并且该流可能仍然有对bytearray的引用。它可能已经被处置了

如果它在这个方法中,请发布它,我想知道

我还没有足够的经验来准确地说出它是关于什么的,但也许我的建议会恰到好处


顺便说一句,你的代码看起来很干净,我喜欢

因此,尽管CrossMedia插件一开始就出现了这个问题,但它也犯了同样的错误

但是,仅当您选择以下照片时,才会出现错误:

var _mediaFile = await CrossMedia.Current.PickPhotoAsync();
所以,当我这么做的时候:

var _mediaFile = await CrossMedia.Current.PickPhotoAsync(new 
Plugin.Media.Abstractions.PickMediaOptions
        {
            PhotoSize = Plugin.Media.Abstractions.PhotoSize.Small,
            CompressionQuality = 90,
        });

错误消失了。不知道为什么。

嘿,谢谢,我也这么认为,流看起来好像没有复制到新对象,当它在某个阶段被处理时,它会影响整个链。我将很快进一步探讨这一点,并在这里发布它将带我去的地方。看起来这条流被关闭了,这就是原因。第一个例外不是很明确,但做了更多的研究,得到了一个更明确的例外,即“无法访问封闭流”。现在要弄清楚这一点。那么异常指出的是哪个流呢?我相信这是全球潮流,对吗?因此,GetImageStreamAsync()方法中需要修复的内容。是的,看起来像ImageSource。PickPhotoButton中的FromStream(()=>\u globalStream)在获取要显示图片的源代码时关闭流。您可能会在xamarin的源代码中找到对此的确认。嗯,我现在看不出一个很好的方法来处理这个问题。哦,好吧,无论如何,谢谢你,我对这个问题做了一些编辑,使它更清晰和简短。显然,即使将控制器Post方法粘贴到从库中选择pic的位置,错误仍然会出现。但对于解决此问题的人员来说,了解SystemObjectDisposed异常的抛出位置非常重要。你知道确切的路线吗?
var _mediaFile = await CrossMedia.Current.PickPhotoAsync(new 
Plugin.Media.Abstractions.PickMediaOptions
        {
            PhotoSize = Plugin.Media.Abstractions.PhotoSize.Small,
            CompressionQuality = 90,
        });