在GridView适配器GetView方法中使用async方法

时间:2014-10-04 07:45:31

标签: android gridview asynchronous xamarin getview

我正在编写一个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方法中启动后台进程以异步检索所需的图像,或者我应该尝试其他方法?

提前致谢

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以随时在等待方法上使用ContinueWith()(只要它返回Task)。

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

ContinueWith()

上的more info

答案 2 :(得分:0)

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

Task.Run(async delegate() => {
       await AsyncMethod().ContinueWith(() => {
          Context.InvokeOnMainThread(() => {
                //DO YOUR UI STUFF HERE!!
               });
       });
});