Xamarin.Forms Plugin.Media GetStream / Dispose不存在

时间:2016-10-17 03:13:31

标签: c# xamarin xamarin.ios xamarin.android xamarin.forms

我尝试使用照片选择器从iOS / Android上的库/图库中获取照片,因此我将Plugin.Media与Xamarin.Forms一起使用。

我用过这个: https://github.com/jamesmontemagno/MediaPlugin

问题是函数GetStream()和Dispose()不存在,这里是确切的错误消息:

  

错误:'任务'不包含'GetStream'的定义,也没有扩展方法'GetStream'接受第一个类型为'Task'的参数(你是否缺少using指令)或汇编参考?)

     

错误:'任务'不包含'Dispose'的定义,并且没有扩展方法'Dispose'可以找到接受类型'Task'的第一个参数(你是否缺少using指令)或汇编参考?)

addphotos.Clicked = new Command(() => { 
    if (CrossMedia.Current.IsPickPhotoSupported)
    {
        if (!CrossMedia.Current.IsPickPhotoSupported)
        {
            DisplayAlert("Photos Not Supported", ":( Permission not granted to photos.", "OK");
            return;
        }
        var file = CrossMedia.Current.PickPhotoAsync();

        if (file == null)
            return;

        image.Source = ImageSource.FromStream(() =>
        {
            var stream = file.GetStream();
            file.Dispose();
            return stream;
        });
    }
});

2 个答案:

答案 0 :(得分:1)

你需要使lambda异步并等待对CrossMedia.Current.PickPhotoAsync的异步调用:

addphotos.Clicked = new Command(async () => { 
    if (CrossMedia.Current.IsPickPhotoSupported)
    {
        if (!CrossMedia.Current.IsPickPhotoSupported)
        {
            DisplayAlert("Photos Not Supported", ":( Permission not granted to photos.", "OK");
            return;
        }
        var file = await CrossMedia.Current.PickPhotoAsync();

        if (file == null)
            return;

        image.Source = ImageSource.FromStream(() =>
        {
            var stream = file.GetStream();
            file.Dispose();
            return stream;
        });
    }
});

PickPhotoAsync()是一个异步方法,因此它返回一个Task,但如果等待它,它将返回您要查找的值。如果您没有达到异步速度并等待,请查看Microsoft指南:

https://msdn.microsoft.com/en-us/library/mt674882.aspx?f=255&MSPPError=-2147217396

答案 1 :(得分:0)

PickPhotoAsync()顾名思义就是一个异步函数,所以你需要在调用时使用await。

// file will be a Task<MediaFile>
var file = CrossMedia.Current.PickPhotoAsync();

// file will be a MediaFile
var file = await CrossMedia.Current.PickPhotoAsync();