Xamarin的.插件形式.媒体GetStream/Dispose不存在
本文关键字:GetStream Dispose 不存在 媒体 插件 Xamarin | 更新日期: 2023-09-27 18:13:15
我尝试实现一个照片选择器从iOS/Android上的库/画廊获取照片,所以我使用Plugin。Media with Xamarin.Forms.
我使用了这个:https://github.com/jamesmontemagno/MediaPlugin
问题是函数GetStream()和Dispose()不存在,下面是确切的错误消息:
错误: 'Task'不包含'GetStream'的定义,并且无法找到接受'Task'类型的第一个参数的扩展方法'GetStream'(您是否缺少using指令或程序集引用?)
错误: 'Task'不包含'Dispose'的定义,并且无法找到接受'Task'类型的第一个参数的扩展方法'Dispose'(您是否缺少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;
});
}
});
您需要将lambda设置为async并等待对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()是一个async方法,所以它返回一个Task,但是如果你等待它,它会返回你正在寻找的值。如果你还没有跟上异步和等待的速度,请查看微软指南:
https://msdn.microsoft.com/en-us/library/mt674882.aspx?f=255& MSPPError = -2147217396
顾名思义,PickPhotoAsync()是一个async函数,所以在调用它时需要使用await。
// file will be a Task<MediaFile>
var file = CrossMedia.Current.PickPhotoAsync();
// file will be a MediaFile
var file = await CrossMedia.Current.PickPhotoAsync();