1

我正在编写一个 Xamarin Android 应用程序,我有一个关于GridView适配器的问题。

是否可以async在方法中使用关键字GetView?我有一个await函数希望在GetView为每个GridView项目异步检索图像的方法中使用?

目前的方法是:

public override View GetView (int position, View convertView, ViewGroup parent)

我正在寻找相当于:

public async override Task<View> GetView (int position, View convertView, ViewGroup parent)

但是,我收到此错误:

'SimpleMapDemo.GridViewWithImageAndTextAdapter.GetView(int, Android.Views.View, Android.Views.ViewGroup)': return type must be 'Android.Views.View' to match overridden member 'Android.Widget.BaseAdapter.GetView(int, Android.Views.View, Android.Views.ViewGroup)'

这可能吗?如果没有,是否可以在每种GetView方法中启动后台进程以异步检索所需的图像,还是我应该尝试另一种方法?

提前致谢

4

3 回答 3

1

您不能使用 await 因为您必须从 UI 线程访问 UI,因此使用 async 方法没有意义。也没有这样的方法。

那就是说你提到的另一个选择是要走的路。在这里,在这里查看我的答案Image is assigned to another row item of ListView

于 2014-10-05T14:58:54.923 回答
0

你可以像这样运行你的任务:

Task.Run(async delegate() => {
       await AsyncMethod().ContinueWith(() => {
          Context.InvokeOnMainThread(() => {
                //DO YOUR UI STUFF HERE!!
               });
       });
});
于 2014-10-06T17:54:35.093 回答
0

您始终可以ContinueWith()在您的可等待方法上使用(只要它返回 a Task)。

...
YourMethod().ContinueWith(t => 
   {
      //Whatever you need to execute when YourMethod() finishes
   });
...

这里有更多信息ContinueWith()

于 2014-10-06T07:23:05.763 回答