我尝试使用照片选择器从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;
});
}
});
答案 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();