【问题标题】:The 'await' operator can only be used within an async method in Xamarin Android [duplicate]“等待”运算符只能在 Xamarin Android 的异步方法中使用 [重复]
【发布时间】:2024-04-11 07:20:02
【问题描述】:

我是 Xamarin Android 的新手,我正在开发一个简单的应用程序,用于从服务器获取和显示图像。 这是我的代码-

 public void testWCF2()
        {
            var imgView = FindViewById<ImageView>(Resource.Id.imageView123);
            using(var bm = await GetImageFromUrl(@"http://xamarin.com/content/images/pages/forms/example-app.png"))    //At this line an error is showing 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'. 
                imgView.SetImageBitmap(bm);

        }

    private async Task<Bitmap> GetImageFromUrl(string url)
    {
        using(var client = new HttpClient())
        {
            var msg = await client.GetAsync(url);
            if (msg.IsSuccessStatusCode)
            {
                using(var stream = await msg.Content.ReadAsStreamAsync())
                {
                    var bitmap = await BitmapFactory.DecodeStreamAsync(stream);
                    return bitmap;
                }
            }
        }
        return null;
    }

请有人帮帮我。

谢谢

【问题讨论】:

  • 您在非 async 方法中调用 await GetImageFromUrl() testWCF2()

标签: c# android web-services xamarin async-await


【解决方案1】:

您需要将async 修饰符添加到您的方法中,例如:

        public async void testWCF2()
        {
            var imgView = FindViewById<ImageView>(Resource.Id.imageView123);
            using(var bm = await GetImageFromUrl(@"http://xamarin.com/content/images/pages/forms/example-app.png"))    
                imgView.SetImageBitmap(bm);
        }

MSDN 说:

使用 async 修饰符指定方法 lambda 表达式或匿名方法是异步的。如果在方法或表达式上使用此修饰符,则称为异步方法。

【讨论】:

  • 错误已经消失,但给定 url 的图像仍然没有显示在 ImageView 上。可能是什么原因。如果您有任何代码,请指定
  • 如果您的方法 GetImageFromUrl 返回任何内容,请尝试调试...
  • 我已经调试了 GetImageFromUrl 方法。它返回空值。调试时,应用程序也会崩溃并给出以下错误-System.Diagnostics.Debugger.Mono_UnhandledException_internal ()
  • 这就是问题所在......但你的问题是关于异步修饰符......
  • 我的异步问题已经解决。我想从服务器的 ImageView 上显示图像。代码如上所示,但没有显示任何内容,并且当 GetImageFromUrl 运行时应用程序也会崩溃。