Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用等待内部设置器_C#_Xamarin - Fatal编程技术网

C# 使用等待内部设置器

C# 使用等待内部设置器,c#,xamarin,C#,Xamarin,我正在尝试从internet异步下载一些图片。我构建了GetImageBitmapFromUrl方法,如下所示 async Task<Bitmap> GetImageBitmapFromUrl(string url) { Bitmap imageBitmap = null; try { using (var webClient = new WebClient()) { var imageBytes = a

我正在尝试从internet异步下载一些图片。我构建了
GetImageBitmapFromUrl
方法,如下所示

async Task<Bitmap> GetImageBitmapFromUrl(string url)
{
    Bitmap imageBitmap = null;
    try
    {
        using (var webClient = new WebClient())
        {
            var imageBytes = await webClient.DownloadStringTaskAsync(url);
            if (imageBytes != null && imageBytes.Length > 0)
            {
                imageBitmap = BitmapFactory.DecodeByteArray(Encoding.ASCII.GetBytes(imageBytes), 0, imageBytes.Length);
            }
        }
    }
    catch
    {
        //Silence is gold.
    }
    return imageBitmap;
}
异步任务GetImageBitmapFromUrl(字符串url) { 位图imageBitmap=null; 尝试 { 使用(var webClient=new webClient()) { var imageBytes=await webClient.DownloadStringTaskAsync(url); if(imageBytes!=null&&imageBytes.Length>0) { imageBitmap=BitmapFactory.DecodeByteArray(Encoding.ASCII.GetBytes(imageBytes),0,imageBytes.Length); } } } 抓住 { //沉默是金。 } 返回图像位图; } 我现在尝试在setter中调用此方法

List<string> _pictures;
Bitmap[] imageBitmap;
int currentPic = 0;
ImageView gellaryViewer;
public List<string> pictures
{
    set
    {
        if (value.Count == 0)
        {
            gellaryViewer.Visibility = ViewStates.Gone;
        }
        else
        {
            gellaryViewer.Visibility = ViewStates.Visible;
            _pictures = value;
            currentPic = 0;
            imageBitmap = new Bitmap[value.Count];
            for (int i = 0; i < value.Count; i++)
                //The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'.
                imageBitmap[i] = await GetImageBitmapFromUrl(value[i]);
            displayPic();
        }
    }
    get { return _pictures; }
}
List\u图片;
位图[]图像位图;
int currentPic=0;
ImageView gellaryViewer;
公开列表图片
{
设置
{
如果(value.Count==0)
{
gellaryViewer.Visibility=ViewStates.Gone;
}
其他的
{
gellaryViewer.Visibility=视图状态.Visible;
_图片=价值;
currentPic=0;
imageBitmap=新位图[value.Count];
for(int i=0;i
但是我得到了这个错误
只能在异步方法中使用'await'运算符。考虑将此方法标记为“AsiNC”修饰符,并将其返回类型改为“任务”。< /代码> 


如何使用“async”修饰符标记setter?

查看此问题的答案:


也就是说,我强烈建议将更新功能从属性转移到单独的方法。属性用于提供事物的当前状态,而不是无限期地阻塞。

查看此问题的答案:


也就是说,我强烈建议将更新功能从属性转移到单独的方法。属性是用来提供事物的当前状态,而不是无限期地阻塞。

简单的回答:你不能。所有属性(包括
get
set
)和同步。保持它的
async
功能,你就很好了

复杂的回答:你可以,但它很难看。将
async
函数设置为私有函数,并从
set
方法调用它。但是由于
集合
是同步的,而调用方法是
异步的
,因此必须以不同的方式进行调用。查看各种选项


注意:最后一个选项只能在您没有其他选项时使用。调试可能很困难,您可能会遇到不希望出现的竞争条件。

简单的回答:您不能。所有属性(包括
get
set
)和同步。保持它的
async
功能,你就很好了

复杂的回答:你可以,但它很难看。将
async
函数设置为私有函数,并从
set
方法调用它。但是由于
集合
是同步的,而调用方法是
异步的
,因此必须以不同的方式进行调用。查看各种选项

注意:最后一个选项只能在您没有其他选项时使用。调试可能很困难,您可能会遇到不希望出现的竞争条件